@deframe-sdk/components 0.1.21 → 0.1.23

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/stories/buttons/action-button/ActionButton.tsx","../src/stories/buttons/close-button/CloseButton.tsx","../src/stories/buttons/percentage-button/PercentageButton.tsx","../src/stories/buttons/primary-button/PrimaryButton.tsx","../src/stories/buttons/secondary-button/SecondaryButton.tsx","../src/stories/buttons/tertiary-button/TertiaryButton.tsx","../src/stories/inputs/InputCompund.tsx","../src/stories/texts/Link.tsx","../src/stories/inputs/Input.tsx","../src/stories/lists/List.tsx","../src/stories/lists/ListCompound.tsx","../src/stories/lists/wallet-list/WalletListContainer.tsx","../src/stories/lists/wallet-list/WalletItem.tsx","../src/stories/lists/wallet-list/WalletList.tsx","../src/stories/lists/wallet-list/WalletConnectPanel.tsx","../src/stories/currency/Currency.tsx","../src/stories/texts/Text.tsx","../src/stories/texts/TextAccent.tsx","../src/stories/texts/TextBody.tsx","../src/stories/texts/TextHeading.tsx","../src/stories/texts/Title.tsx","../src/stories/tabs/Tabs.tsx","../src/stories/select/Select.tsx","../src/stories/loading/Skeleton.tsx","../src/stories/banner/BannerNotificationCompound.tsx","../src/stories/banner/BannerNotification.tsx","../src/stories/address/AddressDisplay.tsx","../src/stories/details/SummaryDetails.tsx","../src/stories/details/SummaryDetailsCryptoControlV2.tsx","../src/stories/action-sheet/ActionSheet.tsx","../src/stories/providers/DeframeComponentsProvider.tsx","../src/stories/info-display/InfoRow.tsx","../src/stories/info-display/InfoLabel.tsx","../src/stories/info-display/InfoValue.tsx","../src/stories/info-display/InfoRowWithIcon.tsx","../src/stories/info-display/InfoRowIconLabel.tsx","../src/stories/info-display/InfoRowIconValue.tsx","../src/stories/info-display/CollapsibleInfoRow.tsx","../src/stories/layout/BackgroundContainer.tsx","../src/stories/layout/SectionCard.tsx","../src/stories/layout/Navbar.tsx","../src/stories/layout/FlexCol.tsx","../src/stories/layout/FlexRow.tsx","../src/stories/layout/ScrollableContent.tsx","../src/stories/details-header/DetailsHeader.tsx","../src/stories/badges/HighRiskBadge.tsx","../src/stories/badges/MediumRiskBadge.tsx","../src/stories/badges/LowRiskBadge.tsx","../src/stories/loading-dots/LoadingDots.tsx","../src/stories/processing-badge/ProcessingBadge.tsx","../src/stories/history-details/HistoryDetailsComponents.tsx","../src/stories/transaction-processing-details/StepStatusIcon.tsx","../src/stories/transaction-processing-details/StepStatusText.tsx","../src/stories/transaction-processing-details/StepDisplay.tsx","../src/stories/transaction-processing-details/TransactionProcessingDetails.tsx","../src/stories/history-details/HistoryDepositDetailsView.tsx","../src/stories/history-details/HistoryWithdrawDetailsView.tsx","../src/stories/swap-amount-input/SwapAmountInputView.tsx","../src/stories/choose-strategy-actionsheet/ChooseAStrategyActionsheetView.tsx","../src/stories/strategy-details/StrategyDetailsView.tsx","../src/stories/progress/ProgressIndicator.tsx","../src/stories/search-input/SearchInput.tsx","../src/stories/search-empty-state/SearchEmptyState.tsx","../src/stories/collapsible-section/CollapsibleSection.tsx","../src/stories/transaction-screen-icon/TransactionScreenIcon.tsx","../src/stories/transaction-screen/TransactionScreen.tsx","../src/stories/transaction-screen-investment-card/TransactionScreenInvestmentCard.tsx","../src/stories/token-with-chain-badge/TokenWithChainBadge.tsx","../src/stories/swap-processing-view/SwapProcessingView.tsx","../src/stories/swap-form-view/constants.ts","../src/stories/swap-form-view/SwapFormSkeleton.tsx","../src/stories/swap-processing-view/SwapProcessingViewSimple.tsx","../src/stories/swap-crosschain-processing-view/SwapCrossChainProcessingView.tsx","../src/stories/investment-crosschain-processing-view/InvestmentCrossChainProcessingView.tsx","../src/stories/swap-signature-warning-view/SwapSignatureWarningView.tsx","../src/stories/swap-signature-warning-view/SwapSignatureWarningViewSimple.tsx","../src/stories/swap-success-view/SwapSuccessView.tsx","../src/stories/swap-success-view/SwapSuccessViewSimple.tsx","../src/stories/swap-transaction-failed-view/SwapTransactionFailedView.tsx","../src/stories/swap-transaction-failed-view/SwapTransactionFailedViewSimple.tsx","../src/stories/choose-an-asset-swap-view/ChooseAnAssetSwapView.tsx","../src/stories/swap-token-selector/SwapTokenSelectorView.tsx","../src/stories/swap-network-selector/SwapNetworkSelectorView.tsx","../src/stories/swap-from-card-view/SwapFromCardView.tsx","../src/stories/swap-output-amount/SwapOutputAmountView.tsx","../src/stories/swap-to-card-view/SwapToCardView.tsx","../src/stories/swap-slippage-tolerance-buttons/SwapSlippageToleranceButtonsView.tsx","../src/stories/swap-advanced-settings-view/SwapAdvancedSettingsView.tsx","../src/stories/swap-quote-header/SwapQuoteHeaderView.tsx","../src/stories/swap-quote-blockchain-costs/SwapQuoteBlockchainCostsView.tsx","../src/stories/swap-quote-errors/SwapQuoteErrorsView.tsx","../src/stories/swap-quote-details-view/SwapQuoteDetailsView.tsx","../src/stories/confirm-swap-button-view/ConfirmSwapButtonView.tsx","../src/stories/swap-form-view/SwapFormView.tsx","../src/stories/swap-from-card-view/SwapFromCardViewSimple.tsx","../src/stories/swap-to-card-view/SwapToCardViewSimple.tsx","../src/stories/confirm-swap-button-view/ConfirmSwapButtonViewSimple.tsx","../src/stories/swap-form-view/SwapFormViewSimple.tsx","../src/stories/choose-a-network-view/ChooseANetworkView.tsx","../src/utils/useIsMobile.ts","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/CloseButtonInline.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/IconCircle.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/hasSignificantBalance.ts","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/NetworkRow.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/NetworkChip.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/SearchInputInline.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/AssetRowInline.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/TokensLoadingState.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/AssetSearchAndList.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/ChooseNetworkAndAssetViewSimple.tsx","../src/stories/swap-history-view/LoadingSkeleton.tsx","../src/stories/swap-history-view/EmptyState.tsx","../src/stories/swap-history-view/SwapItemIcon.tsx","../src/stories/swap-history-view/SwapHistoryView.tsx","../src/stories/history-swap-details-view/HistorySwapDetailsView.tsx","../src/stories/swap-widget-fallback-view/SwapWidgetFallbackView.tsx","../src/stories/apy-range/ApyRange.tsx","../src/stories/label/Label.tsx","../src/stories/history-list-skeleton/HistoryListSkeleton.tsx","../src/stories/wallet-balances/WalletBalances.tsx","../src/stories/history-tab-empty/HistoryTabEmpty.tsx","../src/stories/strategy-grid-card/StrategyGridCard.tsx","../src/stories/back-button/BackButton.tsx","../src/stories/earn-balance-card/EarnBalanceCard.tsx","../src/stories/earn-investment-summary-view/EarnInvestmentSummaryView.tsx","../src/stories/earn-invested-section-view/EarnInvestedSectionView.tsx","../src/stories/earn-explore-grid-view/EarnExploreGridView.tsx","../src/stories/earn-recent-transactions-view/EarnRecentTransactionsView.tsx","../src/stories/earn-desktop-view/EarnDesktopView.tsx","../src/stories/earn-investment-details-view/EarnInvestmentDetailsView.tsx","../src/stories/grouped-strategy-list-view/GroupedStrategyListView.tsx","../src/stories/history-list-view/DateLabel.tsx","../src/stories/history-list-view/ArrowBadge.tsx","../src/stories/history-list-view/TokenIconWithBadge.tsx","../src/stories/history-list-view/SwapIconWithBadge.tsx","../src/stories/history-list-view/AmountDisplay.tsx","../src/stories/history-list-view/HistoryListView.tsx","../src/stories/earn-token-selector-view/EarnTokenSelectorView.tsx","../src/stories/earn-amount-input-view/EarnAmountInputView.tsx","../src/stories/earn-percentage-buttons-view/EarnPercentageButtonsView.tsx","../src/stories/earn-withdraw-token-selector-view/EarnWithdrawTokenSelectorView.tsx","../src/stories/earn-no-balance-notification-view/EarnNoBalanceNotificationView.tsx","../src/stories/earn-tx-status-card-view/EarnTxStatusCardView.tsx","../src/stories/earn-bytecode-error-view/EarnBytecodeErrorView.tsx","../src/stories/earn-position-card-view/EarnPositionCardView.tsx","../src/stories/earn-deposit-form-view/EarnDepositFormView.tsx","../src/stories/earn-withdraw-form-view/EarnWithdrawFormView.tsx","../src/stories/earn-deposit-processing-view/EarnDepositProcessingView.tsx","../src/stories/earn-deposit-success-view/EarnDepositSuccessView.tsx","../src/stories/earn-deposit-warning-view/EarnDepositWarningView.tsx","../src/stories/earn-deposit-failed-view/EarnDepositFailedView.tsx","../src/stories/earn-withdraw-processing-view/EarnWithdrawProcessingView.tsx","../src/stories/earn-withdraw-success-view/EarnWithdrawSuccessView.tsx","../src/stories/earn-withdraw-warning-view/EarnWithdrawWarningView.tsx","../src/stories/earn-withdraw-failed-view/EarnWithdrawFailedView.tsx"],"names":["twMerge","jsx","HiXMark","Input","jsxs","React","React2","React3","React4","React5","motion","React6","AnimatePresence","React7","MdInfoOutline","MdWarningAmber","MdErrorOutline","MdCheckCircleOutline","MdClose","React8","React9","React10","HiChevronUp","HiChevronDown","gapClasses","HiChevronLeft","HiOutlineClock","IoCheckmarkOutline","IoTimeOutline","IoAlertCircleOutline","textColorClass","HiArrowRight","useState","useEffect","MdOutlineSearch","MdOutlineSearchOff","Fragment","MdOutlineSwapHoriz","MdHistory","MdOutlineSwapVert","useRef","useCallback","TokenIcon","IconCircle","React21","React22","React23","_a","PiClockCountdownBold","MdArrowUpward","HiArrowLeft","MdArrowRight","MdArrowDownward","TokenIconWithBadge","MdArrowDropDown"],"mappings":"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","file":"index.js","sourcesContent":["import { twMerge } from 'tailwind-merge'\nimport type { ButtonProps } from '../index'\n\n/** Primary UI component for user interaction */\nexport default function ActionButton ({\n children,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}: ButtonProps) {\n const baseClasses = [\n 'flex-1 inline-flex items-center justify-center overflow-hidden',\n 'h-[var(--deframe-widget-font-leading-lg)]',\n 'px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border border-[color:var(--deframe-widget-color-border-tertiary)]',\n 'font-[var(--deframe-widget-font-family)] [font-size:var(--deframe-widget-font-size-lg)] [line-height:var(--deframe-widget-font-leading-lg)] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'transition-[background,border-color,box-shadow,opacity] duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-[color:var(--deframe-widget-color-brand-primary)]',\n ].join(' ')\n\n const stateClasses = disabled\n ? [\n 'cursor-not-allowed',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n ].join(' ')\n : [\n 'cursor-pointer',\n 'bg-[var(--deframe-widget-color-brand-primary)]',\n 'text-[color:var(--deframe-widget-color-text-primary-dark)]',\n 'hover:opacity-90',\n 'hover:shadow-[0_2px_8px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_18%,transparent)]',\n ].join(' ')\n\n const containerClasses = twMerge(\n baseClasses,\n stateClasses,\n className\n )\n\n return (\n <button\n type={type}\n className={containerClasses}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n","import React from 'react'\nimport { HiXMark } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface CloseButtonProps {\n /** Click handler for the close button */\n onClick?: () => void;\n /** Test ID for testing purposes */\n testId?: string;\n /** ARIA label for accessibility */\n ariaLabel?: string;\n /** Additional CSS class names */\n className?: string;\n}\n\nconst CloseButton: React.FC<CloseButtonProps> = ({ onClick, testId, ariaLabel = 'Close', className }) => {\n const baseClasses = 'w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-brand-primary)] transition-colors cursor-pointer'\n\n return (\n <button\n data-test-id={testId ?? 'close-button'}\n onClick={onClick}\n className={twMerge(baseClasses, className)}\n aria-label={ariaLabel}\n >\n <HiXMark className='w-6 h-6' />\n </button>\n )\n}\n\nexport default CloseButton\n","import { twMerge } from 'tailwind-merge'\nimport type { ButtonProps } from '../index'\n\n/** Primary UI component for user interaction */\nexport default function PercentageButton ({\n children,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}: ButtonProps) {\n const containerClasses = twMerge(\n 'flex-1 inline-flex items-center justify-center',\n 'px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border border-[color:var(--deframe-widget-color-border-tertiary)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)] text-[color:var(--deframe-widget-color-text-secondary)]',\n 'font-[var(--deframe-widget-font-family)] [font-size:var(--deframe-widget-font-size-lg)] [line-height:var(--deframe-widget-font-leading-lg)] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'hover:border-[color:var(--deframe-widget-color-border-secondary)] focus:outline-none focus:ring-2 focus:ring-[color:var(--deframe-widget-color-brand-primary)]',\n disabled && 'cursor-not-allowed',\n className\n )\n\n return (\n <button\n type={type}\n className={containerClasses}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { ButtonProps } from '../index'\n\n/** Primary UI component for user interaction - uses brand-primary color for theming */\nexport default function PrimaryButton ({\n children,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}: ButtonProps) {\n /** base button classes */\n const baseClasses = [\n /** layout */\n 'overflow-hidden w-full flex items-center justify-center transition-all duration-200',\n /** typography */\n 'font-[var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n /** spacing */\n 'px-[var(--deframe-widget-size-padding-x-xl)]',\n 'py-[var(--deframe-widget-size-padding-y-md)]',\n /** container */\n 'rounded-[var(--deframe-widget-size-radius-xs)]',\n 'border-solid border-[length:var(--deframe-widget-size-border-xs)]',\n 'gap-[var(--deframe-widget-size-gap-sm)]'\n ].join(' ')\n\n const stateClasses = {\n /** enabled state */\n enabled: [\n 'hover:opacity-90',\n 'text-[color:var(--deframe-widget-color-text-inverse)]',\n 'bg-[var(--deframe-widget-color-brand-primary)]',\n 'border-[color:var(--deframe-widget-color-border-primary)]',\n 'cursor-pointer'\n ].join(' '),\n /** disabled state */\n disabled: [\n 'text-[color:var(--deframe-widget-color-text-inverse-disabled)]',\n 'bg-[var(--deframe-widget-color-brand-primary-disabled)]',\n 'border-[color:var(--deframe-widget-color-border-primary-disabled)]',\n 'cursor-not-allowed'\n ].join(' '),\n } as const\n\n /** button classes merge */\n const buttonClasses = twMerge(\n baseClasses,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <button\n data-slot='primary-button'\n data-test-id='primary-button'\n aria-label='primary action'\n type={type}\n className={buttonClasses}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { ButtonProps } from '../index'\n\n/** Secondary UI component for user interaction - outline style using brand-primary color */\nexport default function SecondaryButton ({\n children,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}: ButtonProps) {\n /** base button classes */\n const baseClasses = [\n /** layout */\n 'overflow-hidden w-full flex items-center justify-center transition-all duration-200',\n /** typography */\n 'font-[var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n /** spacing */\n 'px-[var(--deframe-widget-size-padding-x-xl)]',\n 'py-[var(--deframe-widget-size-padding-y-md)]',\n /** container */\n 'bg-transparent',\n 'rounded-[var(--deframe-widget-size-radius-xs)]',\n 'border-solid border-[length:var(--deframe-widget-size-border-xs)]',\n 'gap-[var(--deframe-widget-size-gap-sm)]',\n ].join(' ')\n\n /** state classes map */\n const stateClasses = {\n enabled: [\n 'text-[color:var(--deframe-widget-color-brand-primary)]',\n 'border-[color:var(--deframe-widget-color-brand-primary)]',\n 'hover:opacity-90',\n 'cursor-pointer',\n ].join(' '),\n disabled: [\n 'text-[color:var(--deframe-widget-color-brand-primary-disabled)]',\n 'border-[color:var(--deframe-widget-color-brand-primary-disabled)]',\n 'cursor-not-allowed',\n ].join(' '),\n } as const\n\n /** button classes merge */\n const buttonClasses = twMerge(\n baseClasses,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <button\n data-slot='secondary-button'\n data-test-id='secondary-button'\n aria-label='secondary action'\n type={type}\n className={buttonClasses}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { ButtonProps } from '../index'\n\n/** Tertiary UI component for user interaction - ghost style using brand-tertiary color */\nexport default function TertiaryButton ({\n children,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}: ButtonProps) {\n /** base button classes */\n const baseClasses = [\n /** layout */\n 'overflow-hidden w-full flex items-center justify-center transition-all duration-200',\n /** typography */\n 'font-[var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n /** spacing */\n 'px-[var(--deframe-widget-size-padding-x-xl)]',\n 'py-[var(--deframe-widget-size-padding-y-md)]',\n /** container */\n 'bg-transparent border-none',\n 'rounded-[var(--deframe-widget-size-radius-xs)]',\n 'gap-[var(--deframe-widget-size-gap-sm)]',\n ].join(' ')\n\n /** state classes map */\n const stateClasses = {\n enabled: [\n 'text-[color:var(--deframe-widget-color-text-tertiary)]',\n 'hover:opacity-90',\n 'cursor-pointer',\n ].join(' '),\n disabled: [\n 'text-[color:var(--deframe-widget-color-text-tertiary-disabled)]',\n 'cursor-not-allowed',\n ].join(' '),\n } as const\n\n /** button classes merge */\n const buttonClasses = twMerge(\n baseClasses,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <button\n data-slot='tertiary-button'\n data-test-id='tertiary-button'\n aria-label='tertiary action'\n type={type}\n className={buttonClasses}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { ComponentProps } from 'react'\n\nexport interface InputProps extends ComponentProps<'div'> {}\n\nexport function Input ({ className = '', ...props }: InputProps) {\n const baseClasses = [\n 'flex flex-col',\n '[gap:var(--deframe-widget-size-gap-xs)]',\n ].join(' ')\n\n return (\n <div\n data-slot='input'\n data-test-id='input'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n\nexport function InputLabel ({ className = '', ...props }: ComponentProps<'label'>) {\n const baseClasses = [\n '[font-family:var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-xs)]',\n '[font-weight:var(--deframe-widget-font-weight-medium)]',\n 'text-[var(--deframe-widget-color-text-primary)]',\n ].join(' ')\n\n return (\n <label\n data-slot='input-label'\n data-test-id='input-label'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n\nexport interface InputFieldProps extends ComponentProps<'input'> {\n hasError?: boolean\n}\n\nexport function InputField ({ hasError = false, disabled, className = '', ...props }: InputFieldProps) {\n const baseClasses = [\n 'w-full',\n '[font-family:var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'text-[var(--deframe-widget-color-text-primary)]',\n 'placeholder-[var(--deframe-widget-color-placeholder-primary)]',\n 'border-[length:var(--deframe-widget-size-border-xs)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'px-[var(--deframe-widget-size-padding-x-md)]',\n 'py-[var(--deframe-widget-size-padding-y-sm)]',\n 'outline-none',\n 'transition-colors',\n ].join(' ')\n\n const stateClasses = {\n default: [\n 'border border-[var(--deframe-widget-color-border-primary)]',\n 'bg-[var(--deframe-widget-color-bg-raised)]'\n ].join(' '),\n error: [\n 'border border-[var(--deframe-widget-color-state-error)]',\n 'bg-[var(--deframe-widget-color-bg-raised)]'\n ].join(' '),\n disabled: [\n 'border',\n 'border-[var(--deframe-widget-color-border-primary-disabled)]',\n 'bg-[var(--deframe-widget-color-bg-raised-disabled)]',\n 'opacity-60',\n 'cursor-not-allowed',\n ].join(' '),\n } as const\n\n const stateKey = hasError ? 'error' : disabled ? 'disabled' : 'default'\n const fieldClasses = twMerge(baseClasses, stateClasses[stateKey], className)\n\n return (\n <input\n data-slot='input-field'\n data-test-id='input-field'\n aria-invalid={hasError || undefined}\n disabled={disabled}\n className={fieldClasses}\n {...props}\n />\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { LinkProps } from './index'\n\nexport function Link ({\n children,\n href,\n className = '',\n target = '_blank',\n disabled = false,\n prefetch: _prefetch,\n replace: _replace,\n scroll: _scroll,\n ...props\n}: LinkProps) {\n const baseClasses = [\n '[font-family:var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[font-weight:var(--deframe-widget-font-weight-medium)]',\n '[line-height:var(--deframe-widget-font-leading-lg)]',\n ].join(' ')\n\n const stateClasses = {\n enabled: [\n 'text-[color:var(--deframe-widget-color-text-primary)]',\n 'hover:underline',\n 'cursor-pointer',\n ].join(' '),\n disabled: [\n 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n 'cursor-not-allowed',\n 'pointer-events-none',\n ].join(' '),\n } as const\n\n const linkClasses = twMerge(\n baseClasses,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n if (disabled) {\n return (\n <span\n data-slot='link'\n data-test-id='link'\n aria-disabled\n className={linkClasses}\n >\n {children}\n </span>\n )\n }\n\n return (\n <a\n href={href}\n target={target}\n data-slot='link'\n data-test-id='link'\n className={linkClasses}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n {...props}\n >\n {children}\n </a>\n )\n}\n\nexport default Link\n","import { Input as InputRoot, InputLabel, InputField } from './InputCompund'\nimport Link from '../texts/Link'\nimport type { InputProps } from './index'\n\nexport function Input ({\n label,\n error,\n placeholder,\n type = 'text',\n repassword = 'Forgot password?',\n href = '/',\n disabled,\n className = '',\n ...props\n}: InputProps) {\n const hasError = !!error\n\n return (\n <InputRoot className={className}>\n {label && <InputLabel>{label}</InputLabel>}\n <InputField\n type={type}\n placeholder={placeholder}\n disabled={disabled}\n hasError={hasError}\n aria-label={label}\n {...props}\n />\n {type === 'password' && (\n <div\n data-slot='input-repassword'\n data-test-id='input-repassword'\n className='text-right'\n >\n <Link href={href} disabled={disabled}>\n {repassword}\n </Link>\n </div>\n )}\n {error && (\n <p className='mt-[var(--deframe-widget-size-gap-xs)] text-[color:var(--deframe-widget-color-state-error)] [font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]'>\n {error}\n </p>\n )}\n </InputRoot>\n )\n}\n\nexport default Input\n","import { twMerge } from 'tailwind-merge'\nimport type { ListItemProps } from './index'\n\nexport function ListItem ({\n children,\n className,\n containerClassName,\n onClick,\n ...props\n}: ListItemProps) {\n const containerClasses = twMerge(\n 'self-stretch min-h-16 relative rounded-[var(--deframe-widget-size-radius-sm)] border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'text-[color:var(--deframe-widget-color-text-primary)] flex flex-col justify-center items-center transition-colors',\n 'hover:border-[color:var(--deframe-widget-color-border-primary)] bg-[var(--deframe-widget-color-bg-secondary)]',\n onClick && 'cursor-pointer',\n containerClassName\n )\n\n return (\n <div className={containerClasses} onClick={onClick}>\n <div\n className={twMerge(\n 'self-stretch inline-flex justify-between items-center',\n 'gap-[var(--deframe-widget-size-gap-md)]',\n 'px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-sm)]',\n 'text-[color:var(--deframe-widget-color-text-primary)]',\n className\n )}\n >\n {children}\n </div>\n </div>\n )\n}\n\nexport const ListItemLeftSide: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => {\n return (\n <div\n className={twMerge('flex justify-center items-center text-[color:var(--deframe-widget-color-text-primary)]', className)}\n >\n {children}\n </div>\n )\n}\n\nexport const ListItemContent: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => {\n return (\n <div\n className={twMerge(\n 'flex-1 self-stretch inline-flex flex-col justify-center items-start overflow-hidden text-[color:var(--deframe-widget-color-text-primary)]',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nexport const ListItemRightSide: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => {\n return (\n <div\n className={twMerge(\n 'flex flex-col justify-start items-end text-[color:var(--deframe-widget-color-text-primary)]',\n className\n )}\n >\n {children}\n </div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { ListContainerProps, ListItemContentProps, ListItemLeftSideProps, ListItemRightSideProps } from './index'\n\nexport function ListContainer ({ className, ...props }: ListContainerProps) {\n const baseClasses = [\n 'flex flex-col list-none',\n '[gap:var(--deframe-widget-size-gap-sm)]',\n ].join(' ')\n\n return (\n <ul\n data-slot='list-container'\n data-test-id='list-container'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n\nexport function ListItemLeftSide ({ children, className, ...props }: ListItemLeftSideProps) {\n const baseClasses = [\n 'flex justify-center items-center',\n 'text-[var(--deframe-widget-color-text-primary)]',\n ].join(' ')\n\n return (\n <div\n data-slot='list-item-left-side'\n data-test-id='list-item-left-side'\n className={twMerge(baseClasses, className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport function ListItemContent ({ children, className, ...props }: ListItemContentProps) {\n const baseClasses = [\n 'flex-1 self-stretch inline-flex flex-col justify-center items-start overflow-hidden',\n 'text-[var(--deframe-widget-color-text-primary)]',\n ].join(' ')\n\n return (\n <div\n data-slot='list-item-content'\n data-test-id='list-item-content'\n className={twMerge(baseClasses, className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport function ListItemRightSide ({ children, className, ...props }: ListItemRightSideProps) {\n const baseClasses = [\n 'flex flex-col justify-start items-end',\n 'text-[var(--deframe-widget-color-text-primary)]',\n ].join(' ')\n\n return (\n <div\n data-slot='list-item-right-side'\n data-test-id='list-item-right-side'\n className={twMerge(baseClasses, className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport { type ReactNode } from 'react'\n\nexport interface WalletListContainerProps {\n /** Child components (typically WalletItem components) */\n children: ReactNode\n /** Additional CSS class names */\n className?: string\n}\n\n/**\n * WalletListContainer — vertical flex wrapper with consistent gap between wallet items.\n */\nexport default function WalletListContainer ({\n children,\n className,\n}: WalletListContainerProps) {\n return (\n <div\n data-slot='wallet-list-container'\n className={twMerge('w-full flex flex-col gap-[var(--deframe-widget-size-gap-sm)]', className)}\n >\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport type { WalletItemProps } from '../index'\n\n// ─── WalletItem ───────────────────────────────────────────────────────────────\n\n/**\n * WalletItem — individual tappable wallet row.\n * Rounded-square icon + wallet name + chevron, themed with Hash design tokens.\n */\nexport default function WalletItem ({\n id,\n name,\n icon,\n onClick,\n className,\n}: WalletItemProps) {\n return (\n <button\n key={id}\n data-slot='wallet-item'\n data-test-id='wallet-item'\n aria-label={`Connect ${name} wallet`}\n onClick={onClick}\n className={twMerge(\n 'w-full flex items-center gap-[var(--deframe-widget-size-gap-sm)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)] active:scale-[0.99]',\n 'transition-[background,border-color] duration-150',\n 'cursor-pointer outline-none text-left',\n 'font-[var(--deframe-widget-font-family)]',\n className\n )}\n >\n <div\n data-slot='wallet-item-icon'\n data-test-id='wallet-item-icon'\n className='shrink-0 w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] overflow-hidden flex items-center justify-center'\n >\n {typeof icon === 'string'\n ? (\n <img\n src={icon}\n alt={name}\n className='object-cover w-full h-full'\n />\n )\n : (\n icon\n )}\n </div>\n\n <div className='flex-1 text-[17px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] leading-[1.3] [font-family:inherit]'>\n {name}\n </div>\n\n <svg\n data-slot='wallet-item-chevron'\n data-test-id='wallet-item-chevron'\n fill='none'\n aria-hidden='true'\n className='flex-shrink-0 text-(--deframe-widget-color-text-secondary)'\n >\n <path\n d='M7.5 5L12.5 10L7.5 15'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n </button>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport WalletListContainer from './WalletListContainer'\nimport WalletItem from './WalletItem'\n\nexport interface WalletOption {\n /** Unique identifier for the wallet */\n id: string\n /** Display name of the wallet */\n name: string\n /** Wallet icon — image URL or React node */\n icon: string | React.ReactNode\n /** Click handler for wallet selection */\n onClick?: () => void\n}\n\nexport interface ConnectWalletListProps {\n /** List of wallet options */\n wallets: WalletOption[]\n /** Optional title shown above the list */\n title?: string\n /** Optional subtitle shown below the title */\n subtitle?: string\n /** Additional CSS class names */\n className?: string\n}\n\n/**\n * ConnectWalletList — headless list of wallet options with optional title and subtitle.\n * No outer panel/card styling — embed inside your own container or use WalletConnectPanel.\n */\nexport default function ConnectWalletList ({\n wallets,\n title,\n subtitle,\n className,\n}: ConnectWalletListProps) {\n return (\n <div\n data-slot='connect-wallet-list'\n className={twMerge('w-full flex flex-col gap-[var(--deframe-widget-size-gap-md)]', className)}\n >\n {(title != null || subtitle != null) && (\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-xs)]'>\n {title != null && (\n <h2 className='text-[color:var(--deframe-widget-color-text-primary)] text-[20px] [font-weight:var(--deframe-widget-font-weight-bold)] leading-[1.25] font-[var(--deframe-widget-font-family)]'>\n {title}\n </h2>\n )}\n {subtitle != null && (\n <p className='text-[color:var(--deframe-widget-color-text-secondary)] text-[14px] leading-[1.5] font-[var(--deframe-widget-font-family)]'>\n {subtitle}\n </p>\n )}\n </div>\n )}\n <WalletListContainer>\n {wallets.map((wallet) => (\n <WalletItem\n key={wallet.id}\n id={wallet.id}\n name={wallet.name}\n icon={wallet.icon}\n onClick={() => wallet.onClick?.()}\n />\n ))}\n </WalletListContainer>\n </div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport WalletItem from './WalletItem'\nimport WalletListContainer from './WalletListContainer'\nimport type { WalletOption } from './WalletList'\n\nexport interface WalletConnectPanelProps {\n /** List of wallet options to display */\n wallets: WalletOption[]\n /** Panel title. Defaults to \"Conectar Carteira\" */\n title?: string\n /** Subtitle below the title. Defaults to the standard connect message */\n subtitle?: string\n /** When provided, a \"Sair\" button appears in the header and calls this on click */\n onClose?: () => void\n /** Additional CSS class names */\n className?: string\n}\n\n/**\n * WalletConnectPanel — \"Conectar Carteira\" macro compound component.\n *\n * Self-contained dark panel with:\n * - Title + optional \"Sair\" close button\n * - Muted subtitle\n * - Vertical list of tappable WalletItem cards\n *\n * Themed via Hash design tokens (CSS vars).\n */\nexport function WalletConnectPanel ({\n wallets,\n title,\n subtitle,\n onClose,\n className,\n}: WalletConnectPanelProps) {\n return (\n <div\n data-slot='wallet-connect-panel'\n data-test-id='wallet-connect-panel'\n className={twMerge(\n 'w-full flex flex-col gap-[var(--deframe-widget-size-gap-md)] px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'font-[var(--deframe-widget-font-family)]',\n className\n )}\n >\n {/* ── Header: title + optional Sair ── */}\n <div className='flex items-center justify-between gap-[var(--deframe-widget-size-gap-md)]'>\n <h2 className='text-[color:var(--deframe-widget-color-text-primary)] text-[20px] [font-weight:var(--deframe-widget-font-weight-bold)] leading-[1.25] [font-family:inherit]'>\n {title ?? 'Conectar Carteira'}\n </h2>\n {onClose != null && (\n <button\n type='button'\n data-slot='wallet-connect-close'\n data-test-id='wallet-connect-close'\n onClick={onClose}\n className={twMerge(\n 'text-[color:var(--deframe-widget-color-text-secondary)] text-[15px] [font-weight:var(--deframe-widget-font-weight-medium)] leading-none',\n 'hover:text-[color:var(--deframe-widget-color-text-primary)] transition-colors duration-150',\n 'cursor-pointer outline-none bg-transparent border-none px-[var(--deframe-widget-size-padding-x-none)] py-[var(--deframe-widget-size-padding-y-none)]',\n 'flex-shrink-0 [font-family:inherit]'\n )}\n >\n Sair\n </button>\n )}\n </div>\n\n {/* ── Subtitle ── */}\n <p className='text-[color:var(--deframe-widget-color-text-secondary)] text-[14px] leading-[1.5] [font-family:inherit] -mt-[var(--deframe-widget-size-gap-sm)]'>\n {subtitle ?? 'Escolha sua carteira preferida para conectar'}\n </p>\n\n {/* ── Wallet list ── */}\n <WalletListContainer>\n {wallets.map((wallet) => (\n <WalletItem\n key={wallet.id}\n id={wallet.id}\n name={wallet.name}\n icon={wallet.icon}\n onClick={() => wallet.onClick?.()}\n />\n ))}\n </WalletListContainer>\n </div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport { CurrencyProps, CurrencyType, FiatProps } from '.'\n\n// Currency configuration\nconst CURRENCY_CONFIG = {\n symbols: {\n USD: '$',\n BRL: 'R$',\n EUR: '€',\n BTC: '₿',\n ETH: 'Ξ',\n USDC: '$',\n USDT: '$',\n } as Record<CurrencyType, string>,\n labels: {\n USD: 'USD',\n BRL: 'BRL',\n EUR: 'EUR',\n BTC: 'BTC',\n ETH: 'ETH',\n USDC: 'USDC',\n USDT: 'USDT',\n } as Record<CurrencyType, string>,\n}\n\n// Style configuration\nconst STYLE_CONFIG = {\n alignment: {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n },\n size: {\n sm: {\n primary: '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)]',\n secondary: '[font-size:var(--deframe-widget-font-size-lg)] [line-height:var(--deframe-widget-font-leading-lg)]',\n gap: 'gap-[var(--deframe-widget-size-gap-xs)]'\n },\n md: {\n primary: '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)]',\n secondary: '[font-size:var(--deframe-widget-font-size-xl)] [line-height:var(--deframe-widget-font-leading-xl)]',\n gap: 'gap-[var(--deframe-widget-size-gap-xs)]'\n },\n lg: {\n primary: '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)]',\n secondary: '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)]',\n gap: 'gap-[var(--deframe-widget-size-gap-xs)]'\n },\n },\n}\n\n/** Flexible currency display component supporting fiat and crypto */\nexport default function Currency (props: CurrencyProps | FiatProps) {\n // Normalize props: convert FiatProps to CurrencyProps format\n const normalizedProps: Required<\n Omit<CurrencyProps, 'secondaryAmount' | 'secondaryCurrency'>\n > &\n Pick<CurrencyProps, 'secondaryAmount' | 'secondaryCurrency'> =\n 'usdValue' in props\n ? {\n amount: props.amount,\n currency: 'USD',\n secondaryAmount: props.usdValue,\n secondaryCurrency: undefined,\n align: props.align ?? 'right',\n size: props.size ?? 'lg',\n showSymbol: false,\n showLabel: false,\n className: props.className ?? '',\n }\n : {\n amount: props.amount,\n currency: props.currency ?? 'USD',\n secondaryAmount: props.secondaryAmount,\n secondaryCurrency: props.secondaryCurrency,\n align: props.align ?? 'right',\n size: props.size ?? 'lg',\n showSymbol: props.showSymbol ?? true,\n showLabel: props.showLabel ?? false,\n className: props.className ?? '',\n }\n\n const {\n amount,\n currency,\n secondaryAmount,\n secondaryCurrency,\n align,\n size,\n showSymbol,\n showLabel,\n className,\n } = normalizedProps\n\n // Format currency value\n const formatAmount = (\n value: string,\n curr: CurrencyType,\n displaySymbol: boolean\n ): string => {\n if (!displaySymbol && !showLabel) return value\n\n const symbol = displaySymbol ? CURRENCY_CONFIG.symbols[curr] : ''\n const label = showLabel ? ` ${CURRENCY_CONFIG.labels[curr]}` : ''\n\n // Crypto currencies: no space between symbol and value\n if (\n ['BTC', 'ETH'].includes(curr) &&\n !value.includes('.') &&\n !value.includes(',')\n ) {\n return `${symbol}${value}${label}`\n }\n\n return `${symbol} ${value}${label}`.trim()\n }\n\n return (\n <div\n className={twMerge(\n 'flex flex-col',\n STYLE_CONFIG.alignment[align],\n STYLE_CONFIG.size[size].gap,\n className\n )}\n >\n {/* Primary amount */}\n <div\n className={twMerge(\n '[font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary)] font-[var(--deframe-widget-font-family)]',\n STYLE_CONFIG.size[size].primary\n )}\n >\n {formatAmount(amount, currency, showSymbol)}\n </div>\n\n {/* Secondary amount (optional) */}\n {secondaryAmount && (\n <div\n className={twMerge(\n 'text-[color:var(--deframe-widget-color-text-secondary)] font-[var(--deframe-widget-font-family)]',\n STYLE_CONFIG.size[size].secondary\n )}\n >\n {secondaryCurrency\n ? formatAmount(secondaryAmount, secondaryCurrency, true)\n : secondaryAmount}\n </div>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport type { TextProps } from './index'\n\n/**\n * Base Text component used internally by other text variants.\n * Handles tag selection, base font, and class merging.\n */\nconst Text = React.forwardRef<HTMLElement, TextProps>(\n ({\n children,\n as: Component = 'p',\n disabled = false,\n className = '',\n ...props\n },\n ref\n ) => {\n const baseClasses = [\n '[font-family:var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n ].join(' ')\n\n const stateClasses = {\n enabled: 'text-[color:var(--deframe-widget-color-text-primary)]',\n disabled: 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n } as const\n\n const textClasses = twMerge(\n baseClasses,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return React.createElement(\n Component,\n {\n ref,\n className: textClasses,\n 'aria-disabled': disabled || undefined,\n ...props,\n },\n children\n )\n }\n)\n\nText.displayName = 'Text'\nexport default Text\n","import * as React from 'react'\nimport Text from './Text'\nimport { TextAccentProps } from './index'\nimport { twMerge } from 'tailwind-merge'\n\nexport const TextAccent = React.forwardRef<HTMLElement, TextAccentProps>(\n ({\n as = 'span',\n variant = 'accent-medium',\n disabled = false,\n className = '',\n ...props\n },\n ref\n ) => {\n const accentVariants = {\n 'accent-large': [\n '[font-size:var(--deframe-widget-font-size-lg)]',\n '[line-height:var(--deframe-widget-font-leading-lg)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n ].join(' '),\n 'accent-medium': [\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n ].join(' '),\n 'accent-small': [\n '[font-size:var(--deframe-widget-font-size-sm)]',\n '[line-height:var(--deframe-widget-font-leading-sm)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n ].join(' '),\n } as const\n\n const stateClasses = {\n enabled: 'text-[color:var(--deframe-widget-color-text-primary)]',\n disabled: 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n } as const\n\n type AccentVariant = keyof typeof accentVariants\n const variantClass = accentVariants[variant as AccentVariant]\n const accentClasses = twMerge(\n variantClass,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <Text\n ref={ref}\n as={as}\n className={accentClasses}\n data-slot='text-accent'\n data-test-id='text-accent'\n aria-disabled={disabled || undefined}\n {...props}\n />\n )\n }\n)\n\nTextAccent.displayName = 'TextAccent'\nexport default TextAccent\n","import * as React from 'react'\nimport Text from './Text'\nimport { TextBodyProps } from './index'\nimport { twMerge } from 'tailwind-merge'\n\nexport const TextBody = React.forwardRef<HTMLElement, TextBodyProps>(\n ({\n as = 'p',\n variant = 'text-medium',\n disabled = false,\n className = '',\n ...props\n },\n ref\n ) => {\n const bodyVariants = {\n 'text-large': [\n '[font-size:var(--deframe-widget-font-size-lg)]',\n '[line-height:var(--deframe-widget-font-leading-lg)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n ].join(' '),\n 'text-medium': [\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n ].join(' '),\n 'text-small': [\n '[font-size:var(--deframe-widget-font-size-sm)]',\n '[line-height:var(--deframe-widget-font-leading-sm)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n ].join(' '),\n } as const\n\n const stateClasses = {\n enabled: 'text-[color:var(--deframe-widget-color-text-primary)]',\n disabled: 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n } as const\n\n type BodyVariant = keyof typeof bodyVariants\n const variantClass = bodyVariants[variant as BodyVariant]\n const bodyClasses = twMerge(\n variantClass,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <Text\n ref={ref}\n as={as}\n className={bodyClasses}\n data-slot='text-body'\n data-test-id='text-body'\n aria-disabled={disabled || undefined}\n {...props}\n />\n )\n }\n)\n\nTextBody.displayName = 'TextBody'\nexport default TextBody\n","import * as React from 'react'\nimport Text from './Text'\nimport { TextHeadingProps } from './index'\nimport { twMerge } from 'tailwind-merge'\n\nexport const TextHeading = React.forwardRef<HTMLElement, TextHeadingProps>(\n ({\n as,\n variant = 'h2',\n disabled = false,\n className = '',\n ...props\n }, ref) => {\n const headingVariants = {\n 'h-large': [\n '[font-size:var(--deframe-widget-font-size-xxl)]',\n '[line-height:var(--deframe-widget-font-leading-sm)]',\n '[font-weight:var(--deframe-widget-font-weight-extrabold)]',\n ].join(' '),\n h1: [\n '[font-size:var(--deframe-widget-font-size-xxl)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-extrabold)]',\n ].join(' '),\n h2: [\n '[font-size:var(--deframe-widget-font-size-xxl)]',\n '[line-height:var(--deframe-widget-font-leading-lg)]',\n '[font-weight:var(--deframe-widget-font-weight-extrabold)]',\n ].join(' '),\n h3: [\n '[font-size:var(--deframe-widget-font-size-xl)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n ].join(' '),\n h4: [\n '[font-size:var(--deframe-widget-font-size-xl)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n ].join(' '),\n h5: [\n '[font-size:var(--deframe-widget-font-size-lg)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n ].join(' '),\n } as const\n\n const stateClasses = {\n enabled: 'text-[color:var(--deframe-widget-color-text-primary)]',\n disabled: 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n } as const\n\n type HeadingVariant = keyof typeof headingVariants\n const variantClass = headingVariants[variant as HeadingVariant]\n const headingClasses = twMerge(\n variantClass,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <Text\n ref={ref}\n as={(variant === 'h-large' ? 'h1' : variant) as keyof React.JSX.IntrinsicElements}\n className={headingClasses}\n data-slot='text-heading'\n data-test-id='text-heading'\n aria-disabled={disabled || undefined}\n {...props}\n />\n )\n }\n)\n\nTextHeading.displayName = 'TextHeading'\nexport default TextHeading\n","import TextHeading from './TextHeading'\nimport { TextHeadingProps } from './index'\n\n/**\n * Title component for headings and page titles\n * This is an alias for TextHeading with h1 variant as default\n */\nexport default function Title ({\n variant = 'h1',\n className = '',\n ...props\n}: TextHeadingProps) {\n return <TextHeading variant={variant} className={className} {...props} />\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { motion } from 'framer-motion'\n\n// ============================================================================\n// Context\n// ============================================================================\n\nexport type TabsVariant = 'primary' | 'secondary' | 'default' | 'light' | 'medium' | 'dark' | 'header'\n\ninterface TabsContextValue {\n value: string\n onValueChange: (value: string) => void\n variant: TabsVariant\n}\n\nconst TabsContext = React.createContext<TabsContextValue | undefined>(\n undefined\n)\n\nconst useTabs = () => {\n const ctx = React.useContext(TabsContext)\n if (!ctx) { throw new Error('Tabs compound components must be used within <Tabs />') }\n return ctx\n}\n\n// ============================================================================\n// Tabs (Main Component)\n// ============================================================================\n\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string\n onValueChange?: (value: string) => void\n defaultValue?: string\n variant?: TabsVariant\n}\n\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n variant = 'secondary',\n className,\n children,\n ...props\n },\n ref\n ) => {\n const [internal, setInternal] = React.useState(defaultValue)\n const isControlled = controlledValue !== undefined\n const activeValue = isControlled ? controlledValue : internal\n\n const handleChange = (v: string) => {\n if (!isControlled) setInternal(v)\n onValueChange?.(v)\n }\n\n return (\n <TabsContext.Provider\n value={{\n value: activeValue,\n onValueChange: handleChange,\n variant,\n }}\n >\n <div ref={ref} className={twMerge('w-full', className)} {...props}>\n {children}\n </div>\n </TabsContext.Provider>\n )\n }\n)\nTabs.displayName = 'Tabs'\n\n// ============================================================================\n// TabsList\n// ============================================================================\n\nexport interface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, children, ...props }, ref) => {\n const { variant } = useTabs()\n\n if (variant === 'header') {\n return (\n <div\n ref={ref}\n role='tablist'\n className={twMerge(\n 'relative w-full flex items-center justify-between',\n 'pt-[var(--deframe-widget-size-padding-y-sm)]',\n 'px-[var(--deframe-widget-size-padding-x-lg)]',\n 'bg-[var(--deframe-widget-color-bg-primary)]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n role='tablist'\n className={twMerge(\n 'relative w-full flex items-center bg-transparent border-b border-[color:var(--deframe-widget-color-border-secondary)]',\n variant === 'primary' ? 'h-[72px] gap-[var(--deframe-widget-size-gap-lg)]' : 'h-12',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nTabsList.displayName = 'TabsList'\n\n// ============================================================================\n// TabsTrigger\n// ============================================================================\n\nexport interface TabsTriggerProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n icon?: React.ReactNode\n}\n\nexport const TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n (\n {\n value,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const { value: activeValue, onValueChange, variant } = useTabs()\n const isActive = activeValue === value\n\n return (\n <button\n ref={ref}\n role='tab'\n aria-selected={isActive}\n onClick={() => onValueChange(value)}\n className={twMerge(\n 'relative inline-flex flex-col items-center justify-center whitespace-nowrap font-[var(--deframe-widget-font-family)] transition-colors cursor-pointer disabled:pointer-events-none disabled:opacity-50 outline-none',\n variant === 'header'\n ? 'flex-1 [font-size:var(--deframe-widget-font-size-lg)] [font-weight:var(--deframe-widget-font-weight-semibold)] py-[var(--deframe-widget-size-padding-y-md)]'\n : variant === 'primary'\n ? 'h-[72px] [font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)] [font-weight:var(--deframe-widget-font-weight-medium)] px-[var(--deframe-widget-size-padding-x-none)] pb-[var(--deframe-widget-size-padding-y-sm)] pt-[var(--deframe-widget-size-padding-y-sm)] flex-none'\n : 'h-12 text-[12px] [font-weight:var(--deframe-widget-font-weight-semibold)] px-[var(--deframe-widget-size-padding-x-md)] flex-none',\n variant === 'header'\n ? (isActive ? 'text-[color:var(--deframe-widget-color-brand-primary)]' : 'text-[color:var(--deframe-widget-color-text-secondary)]')\n : (isActive ? 'text-[color:var(--deframe-widget-color-brand-primary)]' : 'text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-text-primary)]'),\n className\n )}\n {...props}\n >\n <span>{children}</span>\n {isActive && variant === 'header' && (\n <motion.span\n layoutId='header-tab-indicator'\n className='absolute bottom-0 left-1/2 -translate-x-1/2 w-14 h-[3px] rounded-t-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-brand-primary)]'\n transition={{ type: 'spring', bounce: 0.2, duration: 0.6 }}\n />\n )}\n {isActive && variant !== 'header' && (\n <motion.span\n layoutId='tab-indicator'\n className='absolute bottom-0 left-0 right-0 h-0.5 bg-[var(--deframe-widget-color-brand-primary)] z-10'\n transition={{ type: 'spring', bounce: 0.2, duration: 0.6 }}\n />\n )}\n </button>\n )\n }\n)\nTabsTrigger.displayName = 'TabsTrigger'\n\n// ============================================================================\n// TabsContent\n// ============================================================================\n\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n}\n\nexport const TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ value, className, children, ...props }, ref) => {\n const { value: activeValue, variant } = useTabs()\n if (activeValue !== value) return null\n\n return (\n <div\n ref={ref}\n role='tabpanel'\n className={twMerge(\n 'focus-visible:outline-none',\n variant === 'primary' || variant === 'header' ? 'mt-[var(--deframe-widget-size-gap-none)]' : 'mt-[var(--deframe-widget-size-gap-lg)]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nTabsContent.displayName = 'TabsContent'\n","import * as React from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SelectProps {\n value: string\n onValueChange: (value: string) => void\n disabled?: boolean\n children: React.ReactNode\n className?: string\n}\n\nexport interface SelectTriggerProps {\n placeholder?: string\n className?: string\n children?: React.ReactNode\n // Internal props (passed by Select)\n _isOpen?: boolean\n _disabled?: boolean\n _onToggle?: () => void\n}\n\nexport interface SelectContentProps {\n className?: string\n children: React.ReactNode\n // Internal props (passed by Select)\n _isOpen?: boolean\n _value?: string\n _onSelect?: (value: string) => void\n _highlightedIndex?: number\n _setHighlightedIndex?: (index: number) => void\n}\n\nexport interface SelectItemProps {\n value: string\n disabled?: boolean\n className?: string\n children: React.ReactNode\n // Internal props (passed by SelectContent)\n _index?: number\n _isSelected?: boolean\n _isHighlighted?: boolean\n _onSelect?: (value: string) => void\n _onHighlight?: (index: number) => void\n}\n\n// ============================================================================\n// ChevronDownIcon\n// ============================================================================\n\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={className}\n viewBox='0 0 20 20'\n fill='currentColor'\n aria-hidden='true'\n >\n <path\n fillRule='evenodd'\n d='M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z'\n clipRule='evenodd'\n />\n </svg>\n)\n\n// ============================================================================\n// Select\n// ============================================================================\n\nexport const Select: React.FC<SelectProps> = ({\n value,\n onValueChange,\n disabled = false,\n children,\n className,\n}) => {\n const [isOpen, setIsOpen] = React.useState(false)\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1)\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n const handleToggle = React.useCallback(() => {\n if (!disabled) {\n setIsOpen((prev) => !prev)\n if (!isOpen) setHighlightedIndex(0)\n }\n }, [disabled, isOpen])\n\n const handleSelect = React.useCallback(\n (newValue: string) => {\n onValueChange(newValue)\n setIsOpen(false)\n setHighlightedIndex(-1)\n },\n [onValueChange]\n )\n\n // Handle click outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false)\n setHighlightedIndex(-1)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n // Handle escape key\n React.useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false)\n setHighlightedIndex(-1)\n }\n }\n\n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isOpen])\n\n // Clone children and inject internal props\n const enhancedChildren = React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return child\n\n if (child.type === SelectTrigger) {\n return React.cloneElement(child as React.ReactElement<SelectTriggerProps>, {\n _isOpen: isOpen,\n _disabled: disabled,\n _onToggle: handleToggle,\n })\n }\n\n if (child.type === SelectContent) {\n return React.cloneElement(child as React.ReactElement<SelectContentProps>, {\n _isOpen: isOpen,\n _value: value,\n _onSelect: handleSelect,\n _highlightedIndex: highlightedIndex,\n _setHighlightedIndex: setHighlightedIndex,\n })\n }\n\n return child\n })\n\n return (\n <div ref={containerRef} className={twMerge('relative', className)}>\n {enhancedChildren}\n </div>\n )\n}\n\nSelect.displayName = 'Select'\n\n// ============================================================================\n// SelectTrigger\n// ============================================================================\n\nexport const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n (\n {\n placeholder = 'Select...',\n className,\n children,\n _isOpen,\n _disabled,\n _onToggle,\n },\n ref\n ) => {\n const hasChildren = React.Children.count(children) > 0\n\n return (\n <button\n ref={ref}\n type='button'\n onClick={_onToggle}\n disabled={_disabled}\n aria-haspopup='listbox'\n aria-expanded={_isOpen}\n className={twMerge(\n 'w-full flex items-center justify-between gap-[var(--deframe-widget-size-gap-sm)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)].5',\n '[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-primary)] text-left',\n 'transition-colors cursor-pointer',\n 'hover:border-[color:var(--deframe-widget-color-border-primary)]',\n 'focus:outline-none focus:ring-2 focus:ring-[color:var(--deframe-widget-color-brand-primary)] focus:border-[color:var(--deframe-widget-color-brand-primary)]',\n _disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n >\n <span\n className={\n !hasChildren\n ? 'text-[color:var(--deframe-widget-color-text-tertiary)]'\n : undefined\n }\n >\n {hasChildren ? children : placeholder}\n </span>\n <ChevronDownIcon\n className={twMerge(\n 'w-4 h-4 text-[color:var(--deframe-widget-color-text-secondary)] transition-transform',\n _isOpen && 'rotate-180'\n )}\n />\n </button>\n )\n }\n)\n\nSelectTrigger.displayName = 'SelectTrigger'\n\n// ============================================================================\n// SelectContent\n// ============================================================================\n\nexport const SelectContent = React.forwardRef<HTMLUListElement, SelectContentProps>(\n (\n {\n className,\n children,\n _isOpen,\n _value,\n _onSelect,\n _highlightedIndex,\n _setHighlightedIndex,\n },\n ref\n ) => {\n const listRef = React.useRef<HTMLUListElement>(null)\n\n // Merge refs\n const mergedRef = React.useCallback(\n (node: HTMLUListElement | null) => {\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n ;(listRef as React.MutableRefObject<HTMLUListElement | null>).current = node\n },\n [ref]\n )\n\n // Scroll highlighted option into view\n React.useEffect(() => {\n if (_isOpen && _highlightedIndex !== undefined && _highlightedIndex >= 0 && listRef.current) {\n const highlightedElement = listRef.current.children[_highlightedIndex] as HTMLElement\n if (highlightedElement) {\n highlightedElement.scrollIntoView({ block: 'nearest' })\n }\n }\n }, [_isOpen, _highlightedIndex])\n\n // Clone children and inject internal props with index\n let itemIndex = 0\n const enhancedChildren = React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return child\n\n if (child.type === SelectItem) {\n const currentIndex = itemIndex++\n const itemProps = child.props as SelectItemProps\n return React.cloneElement(child as React.ReactElement<SelectItemProps>, {\n _index: currentIndex,\n _isSelected: _value === itemProps.value,\n _isHighlighted: _highlightedIndex === currentIndex,\n _onSelect,\n _onHighlight: _setHighlightedIndex,\n })\n }\n\n return child\n })\n\n const contentVariants = {\n hidden: { opacity: 0, y: -8 },\n visible: {\n opacity: 1,\n y: 0,\n transition: { type: 'spring' as const, damping: 25, stiffness: 400 },\n },\n exit: { opacity: 0, y: -8, transition: { duration: 0.1 } },\n }\n\n return (\n <AnimatePresence mode='wait'>\n {_isOpen && (\n <motion.ul\n ref={mergedRef}\n role='listbox'\n variants={contentVariants}\n initial='hidden'\n animate='visible'\n exit='exit'\n className={twMerge(\n 'absolute z-50 w-full mt-[var(--deframe-widget-size-gap-xs)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] shadow-[0_20px_50px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_28%,transparent)]',\n 'max-h-60 overflow-auto',\n 'py-[var(--deframe-widget-size-padding-y-xs)]',\n className\n )}\n >\n {enhancedChildren}\n </motion.ul>\n )}\n </AnimatePresence>\n )\n }\n)\n\nSelectContent.displayName = 'SelectContent'\n\n// ============================================================================\n// SelectItem\n// ============================================================================\n\nexport const SelectItem = React.forwardRef<HTMLLIElement, SelectItemProps>(\n (\n {\n value,\n disabled = false,\n className,\n children,\n _index,\n _isSelected,\n _isHighlighted,\n _onSelect,\n _onHighlight,\n },\n ref\n ) => {\n const handleClick = () => {\n if (!disabled && _onSelect) {\n _onSelect(value)\n }\n }\n\n const handleMouseEnter = () => {\n if (!disabled && _onHighlight && _index !== undefined) {\n _onHighlight(_index)\n }\n }\n\n return (\n <li\n ref={ref}\n role='option'\n aria-selected={_isSelected}\n aria-disabled={disabled}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n className={twMerge(\n 'px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] [font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] cursor-pointer transition-colors',\n 'text-[color:var(--deframe-widget-color-text-primary)]',\n _isSelected && 'text-[color:var(--deframe-widget-color-brand-primary)]',\n _isHighlighted && 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n >\n {children}\n </li>\n )\n }\n)\n\nSelectItem.displayName = 'SelectItem'\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Width of the skeleton block (px, %, rem, etc.) */\n width?: string | number;\n /** Height of the skeleton block (px, %, rem, etc.) */\n height?: string | number;\n /** Shape of the skeleton */\n variant?: 'rect' | 'circle' | 'text';\n /** Enables shimmer animation */\n shimmer?: boolean;\n /** Custom background color (Tailwind classes) */\n colorClass?: string;\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n width = '100%',\n height = '1rem',\n variant = 'text',\n shimmer = true,\n className,\n style,\n ...props\n}) => {\n const defaultGradient =\n 'linear-gradient(25deg, var(--deframe-widget-color-bg-tertiary) 0%, var(--deframe-widget-color-bg-tertiary) 60%, var(--deframe-widget-color-bg-secondary) 100%)'\n\n return (\n <div\n className={twMerge(\n 'relative overflow-hidden animate-fade-in',\n variant === 'circle' ? 'rounded-[var(--deframe-widget-size-radius-full)]' : 'rounded-[var(--deframe-widget-size-radius-xs)]',\n className\n )}\n style={{\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n background: defaultGradient,\n ...style,\n }}\n {...props}\n >\n {shimmer && (\n <div className='absolute inset-0 animate-shimmer bg-gradient-to-r from-transparent via-[color-mix(in srgb, var(--deframe-widget-color-bg-tertiary) 92%, transparent)] to-transparent' />\n )}\n </div>\n )\n}\n\nSkeleton.displayName = 'Skeleton'\n","import { twMerge } from 'tailwind-merge'\nimport type { ComponentProps } from 'react'\nimport { TextHeading, TextBody } from '../texts'\n\nexport function BannerNotificationIcon ({ className, ...props }: ComponentProps<'div'>) {\n const baseClasses = [\n 'flex items-center justify-center',\n 'flex-shrink-0',\n '[font-size:var(--deframe-widget-font-size-xxl)]',\n ].join(' ')\n\n return (\n <div\n data-slot='banner-notification-icon'\n data-test-id='banner-notification-icon'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n\nexport function BannerNotificationContent ({ className, ...props }: ComponentProps<'div'>) {\n const baseClasses = 'flex-1 min-w-0 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)]'\n\n return (\n <div\n data-slot='banner-notification-content'\n data-test-id='banner-notification-content'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n\nexport function BannerNotificationTitle ({ className, ...props }: ComponentProps<'p'>) {\n return (\n <TextHeading\n variant='h4'\n as='p'\n data-slot='banner-notification-title'\n data-test-id='banner-notification-title'\n className={twMerge('[margin-bottom:var(--deframe-widget-size-gap-xs)] text-inherit', className)}\n {...props}\n />\n )\n}\n\nexport function BannerNotificationMessage ({ className, ...props }: ComponentProps<'p'>) {\n return (\n <TextBody\n variant='text-medium'\n data-slot='banner-notification-message'\n data-test-id='banner-notification-message'\n className={twMerge('text-inherit', className)}\n {...props}\n />\n )\n}\n\nexport function BannerNotificationClose ({ className, ...props }: ComponentProps<'button'>) {\n const baseClasses = [\n 'flex-shrink-0',\n 'self-start',\n '[font-size:var(--deframe-widget-font-size-xl)]',\n 'transition-opacity hover:opacity-70 cursor-pointer',\n ].join(' ')\n\n return (\n <button\n data-slot='banner-notification-close'\n data-test-id='banner-notification-close'\n aria-label='Close notification'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport {\n MdInfoOutline,\n MdWarningAmber,\n MdErrorOutline,\n MdCheckCircleOutline,\n MdClose,\n} from 'react-icons/md'\nimport {\n BannerNotificationIcon,\n BannerNotificationContent,\n BannerNotificationTitle,\n BannerNotificationMessage,\n BannerNotificationClose,\n} from './BannerNotificationCompound'\n\nexport interface BannerNotificationProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Type of notification - inline (default) or toast */\n type?: 'inline' | 'toast'\n /** Variant type that determines colors and icon */\n variant?: 'info' | 'warning' | 'error' | 'success'\n /** The title of the banner */\n title?: string\n /** The message to display in the banner */\n message: string\n /** Position for toast notifications */\n position?:\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center'\n /** Auto hide duration in milliseconds (default: 5000, set to 0 to disable) */\n autoHideDuration?: number\n /** Control visibility for toast notifications */\n show?: boolean\n /** Callback when notification is closed */\n onClose?: () => void\n /** Whether to show the icon (default: true) */\n showIcon?: boolean\n /** Custom icon to display */\n icon?: React.ReactNode\n}\n\nexport const BannerNotification: React.FC<BannerNotificationProps> = ({\n type = 'inline',\n variant = 'info',\n title,\n message,\n position = 'top-right',\n autoHideDuration = 5000,\n show = true,\n onClose,\n showIcon = true,\n icon,\n className,\n ...props\n}: BannerNotificationProps) => {\n const [isVisible, setIsVisible] = React.useState(show)\n const [isExiting, setIsExiting] = React.useState(false)\n const timerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const variantInlineClasses = {\n info: 'bg-[var(--deframe-widget-color-state-info)]/20 border-[var(--deframe-widget-color-state-info)]',\n warning: 'bg-[var(--deframe-widget-color-state-warning)]/20 border-[var(--deframe-widget-color-state-warning)]',\n error: 'bg-[var(--deframe-widget-color-state-error)]/20 border-[var(--deframe-widget-color-state-error)]',\n success: 'bg-[var(--deframe-widget-color-state-success)]/20 border-[var(--deframe-widget-color-state-success)]',\n } as const\n\n const variantToastClasses = {\n info: 'bg-[var(--deframe-widget-color-state-info)] border-[var(--deframe-widget-color-state-info)]',\n warning: 'bg-[var(--deframe-widget-color-state-warning)] border-[var(--deframe-widget-color-state-warning)]',\n error: 'bg-[var(--deframe-widget-color-state-error)] border-[var(--deframe-widget-color-state-error)]',\n success: 'bg-[var(--deframe-widget-color-state-success)] border-[var(--deframe-widget-color-state-success)]',\n } as const\n\n const variantTextClasses = {\n info: 'text-[var(--deframe-widget-color-state-info)]',\n warning: 'text-[var(--deframe-widget-color-state-warning)]',\n error: 'text-[var(--deframe-widget-color-state-error)]',\n success: 'text-[var(--deframe-widget-color-state-success)]',\n } as const\n\n const variantIcons = {\n info: MdInfoOutline,\n warning: MdWarningAmber,\n error: MdErrorOutline,\n success: MdCheckCircleOutline,\n } as const\n\n const positionClasses = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n } as const\n\n const handleClose = () => {\n setIsExiting(true)\n setTimeout(() => {\n setIsVisible(false)\n if (timerRef.current) {\n clearTimeout(timerRef.current)\n timerRef.current = null\n }\n onClose?.()\n }, 300)\n }\n\n React.useEffect(() => {\n if (!show) {\n handleClose()\n return\n }\n setIsVisible(true)\n setIsExiting(false)\n }, [show])\n\n React.useEffect(() => {\n if (type === 'toast' && show && autoHideDuration > 0 && !isExiting) {\n timerRef.current = setTimeout(handleClose, autoHideDuration)\n }\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current)\n timerRef.current = null\n }\n }\n }, [type, show, autoHideDuration, isExiting])\n\n if (!isVisible) return null\n\n type Variant = 'info' | 'warning' | 'error' | 'success'\n type BannerType = 'inline' | 'toast'\n type Position = keyof typeof positionClasses\n\n const v = variant as Variant\n const t = type as BannerType\n const p = position as Position\n\n const baseClasses = [\n 'flex items-center',\n '[gap:var(--deframe-widget-size-gap-md)]',\n 'px-[var(--deframe-widget-size-padding-x-md)]',\n 'py-[var(--deframe-widget-size-padding-y-sm)]',\n 'rounded-[var(--deframe-widget-size-radius-xs)]',\n 'border',\n 'transition-all duration-300',\n ].join(' ')\n\n const typeClasses = {\n inline: variantInlineClasses[v],\n toast: [\n variantToastClasses[v],\n 'fixed z-50 w-[clamp(18rem,40vw,30rem)] shadow-[0_20px_50px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_28%,transparent)]',\n positionClasses[p],\n ].join(' '),\n } as const\n\n const bannerClasses = twMerge(\n baseClasses,\n typeClasses[t],\n variantTextClasses[v],\n isExiting && 'opacity-0 -translate-y-2',\n className\n )\n\n const IconComponent = variantIcons[v]\n const resolvedIcon = icon ?? <IconComponent />\n\n return (\n <div\n data-slot='banner-notification'\n data-test-id='banner-notification'\n role='alert'\n className={bannerClasses}\n {...props}\n >\n {\n showIcon && (\n <BannerNotificationIcon>{resolvedIcon}</BannerNotificationIcon>\n )\n }\n\n <BannerNotificationContent>\n {title && <BannerNotificationTitle>{title}</BannerNotificationTitle>}\n <BannerNotificationMessage>{message}</BannerNotificationMessage>\n </BannerNotificationContent>\n\n <BannerNotificationClose onClick={handleClose}>\n <MdClose />\n </BannerNotificationClose>\n </div>\n )\n}\n\nBannerNotification.displayName = 'BannerNotification'\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\n\nexport interface AddressDisplayProps {\n /** The full address to display */\n address: string;\n /** Optional truncated display text shown instead of the full address */\n displayText?: string;\n /** Callback when copy button is clicked */\n onCopy?: (address: string) => void;\n /** Custom className for the container */\n className?: string;\n /** Custom className for the text */\n textClassName?: string;\n /** Show copy button */\n showCopyButton?: boolean;\n}\n\nexport const AddressDisplay: React.FC<AddressDisplayProps> = ({\n address,\n onCopy,\n className = '',\n textClassName = '',\n showCopyButton = true,\n}) => {\n const [copied, setCopied] = React.useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(address)\n setCopied(true)\n onCopy?.(address)\n\n // Reset copied state after 2 seconds\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy address:', err)\n }\n }\n\n return (\n <div\n className={twMerge(\n 'bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-sm)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n 'flex items-center justify-between gap-[var(--deframe-widget-size-gap-sm)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n className\n )}\n >\n <TextBody\n className={twMerge(\n 'block w-full whitespace-nowrap overflow-hidden',\n textClassName\n )}\n >\n {address}\n </TextBody>\n {showCopyButton && (\n <button\n onClick={handleCopy}\n className='text-[color:var(--deframe-widget-color-text-tertiary)] hover:text-[color:var(--deframe-widget-color-text-primary)] transition-colors flex-shrink-0 cursor-pointer'\n aria-label='Copy address'\n >\n {copied\n ? (\n <svg\n className='w-5 h-5 text-[color:var(--deframe-widget-color-state-success)]'\n fill='none'\n stroke='currentColor'\n viewBox='0 0 24 24'\n >\n <path\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth={2}\n d='M5 13l4 4L19 7'\n />\n </svg>\n )\n : (\n <svg\n className='w-5 h-5'\n fill='none'\n stroke='currentColor'\n viewBox='0 0 24 24'\n >\n <path\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth={2}\n d='M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z'\n />\n </svg>\n )}\n </button>\n )}\n </div>\n )\n}\n\nAddressDisplay.displayName = 'AddressDisplay'\n","import * as React from 'react'\nimport { TextBody } from '@/stories/texts'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface DetailItem {\n /** Label for the detail row */\n label: string;\n /** Value to display */\n value: string | React.ReactNode;\n /** Optional custom className for the value */\n valueClassName?: string;\n /** Optional custom className for the label */\n labelClassName?: string;\n}\n\nexport interface SummaryDetailsProps {\n /** Title displayed in the summary header */\n title: string;\n /** Array of detail items to render */\n items: DetailItem[];\n /** Whether the details are open by default */\n defaultOpen?: boolean;\n /** Custom className for the details container */\n className?: string;\n /** Custom className for the summary header */\n summaryClassName?: string;\n /** Custom className for the content area */\n contentClassName?: string;\n /** Show dividers between items */\n showDividers?: boolean;\n}\n\nexport const SummaryDetails: React.FC<SummaryDetailsProps> = ({\n title,\n items,\n defaultOpen = false,\n className = '',\n summaryClassName = '',\n contentClassName = '',\n showDividers = true,\n}) => {\n return (\n <details\n className={twMerge(\n 'bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-sm)]',\n 'p-[var(--deframe-widget-size-gap-lg)] group',\n className\n )}\n open={defaultOpen}\n >\n {/* Summary Header */}\n <summary className={twMerge('cursor-pointer block ', summaryClassName)}>\n <div className='flex items-center justify-between'>\n <TextBody className='text-[color:var(--deframe-widget-color-text-primary)] [font-weight:var(--deframe-widget-font-weight-medium)]'>{title}</TextBody>\n <svg\n className='w-5 h-5 text-[color:var(--deframe-widget-color-text-tertiary)] transition-transform duration-300 group-open:rotate-180'\n fill='none'\n stroke='currentColor'\n viewBox='0 0 24 24'\n aria-hidden='true'\n >\n <path\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth={2}\n d='M5 9l7 7 7-7'\n />\n </svg>\n </div>\n </summary>\n\n {/* Details Content */}\n <div\n className={twMerge(\n 'mt-[var(--deframe-widget-size-gap-lg)]',\n showDividers && 'divide-y divide-[color:var(--deframe-widget-color-border-tertiary)]',\n contentClassName\n )}\n >\n {items.map((item, index) => (\n <div key={index} className='flex justify-between py-[var(--deframe-widget-size-padding-y-sm)]'>\n <TextBody\n variant='text-small'\n className={twMerge('text-[color:var(--deframe-widget-color-text-tertiary)]', item.labelClassName)}\n >\n {item.label}\n </TextBody>\n {typeof item.value === 'string'\n ? (\n <TextBody\n variant='text-small'\n className={twMerge('text-[color:var(--deframe-widget-color-text-primary)] [font-weight:var(--deframe-widget-font-weight-medium)]', item.valueClassName)}\n >\n {item.value}\n </TextBody>\n )\n : (\n <div className={item.valueClassName}>{item.value}</div>\n )}\n </div>\n ))}\n </div>\n </details>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { type SummaryDetailsProps } from './SummaryDetails'\n\nexport const SummaryDetailsCryptoControlV2: React.FC<SummaryDetailsProps> = ({\n title,\n items,\n defaultOpen = false,\n className = '',\n summaryClassName = '',\n contentClassName = '',\n showDividers = true,\n}) => {\n return (\n <details\n data-test-id='summary-details-v2'\n data-slot='summary-details-v2'\n className={twMerge(\n 'bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-md)] border border-[color:var(--deframe-widget-color-border-secondary)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] w-full max-w-[320px] group',\n className\n )}\n open={defaultOpen}\n >\n {/* Header */}\n <summary\n data-test-id='summary-details-v2-summary'\n data-slot='summary-details-v2-summary'\n className={twMerge('cursor-pointer list-none', summaryClassName)}\n >\n <div className='flex items-center justify-between'>\n <span\n data-test-id='summary-details-v2-title'\n data-slot='summary-details-v2-title'\n className='text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)]'\n >\n {title}\n </span>\n <svg\n data-test-id='summary-details-v2-chevron'\n data-slot='summary-details-v2-chevron'\n className='w-4 h-4 text-[color:var(--deframe-widget-color-text-secondary)] transition-transform duration-300 group-open:rotate-180 flex-shrink-0'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n aria-hidden='true'\n >\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M5 9l7 7 7-7' />\n </svg>\n </div>\n </summary>\n\n {/* Top divider */}\n <div\n data-test-id='summary-details-v2-top-divider'\n data-slot='summary-details-v2-top-divider'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)] mt-[var(--deframe-widget-size-gap-sm)]'\n />\n\n {/* Rows */}\n <div\n data-test-id='summary-details-v2-content'\n data-slot='summary-details-v2-content'\n className={twMerge('mt-[var(--deframe-widget-size-gap-none)]', contentClassName)}\n >\n {items.map((item, i) => (\n <React.Fragment key={i}>\n <div\n data-test-id='summary-details-v2-row'\n data-slot='summary-details-v2-row'\n className='flex justify-between items-center py-[10px] gap-[var(--deframe-widget-size-gap-sm)]'\n >\n <span\n data-test-id='summary-details-v2-row-label'\n data-slot='summary-details-v2-row-label'\n className={twMerge(\n 'text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.07em] text-[color:var(--deframe-widget-color-text-tertiary)] flex-shrink-0',\n item.labelClassName\n )}\n >\n {item.label}\n </span>\n\n {typeof item.value === 'string'\n ? (\n <span\n data-test-id='summary-details-v2-row-value'\n data-slot='summary-details-v2-row-value'\n className={twMerge(\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] text-right',\n item.valueClassName\n )}\n >\n {item.value}\n </span>\n )\n : (\n <div\n data-test-id='summary-details-v2-row-value'\n data-slot='summary-details-v2-row-value'\n className={twMerge('text-right', item.valueClassName)}\n >\n {item.value}\n </div>\n )}\n </div>\n\n {showDividers && i < items.length - 1 && (\n <div\n data-test-id='summary-details-v2-row-divider'\n data-slot='summary-details-v2-row-divider'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)]'\n />\n )}\n </React.Fragment>\n ))}\n </div>\n </details>\n )\n}\n","import * as React from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface ActionSheetItem {\n id: string\n label: string\n icon?: React.ReactNode\n variant?: 'default' | 'destructive' | 'success'\n disabled?: boolean\n onClick?: () => void\n}\n\nexport interface ActionSheetProps {\n /** Unique identifier for this action sheet */\n id: string\n /** Current action sheet ID from state */\n currentActionSheetId?: string | null\n /** Whether the action sheet is open */\n isOpen?: boolean\n /** Function to close the action sheet */\n onClose?: () => void\n /** Custom content to render */\n children?: React.ReactNode\n /** Custom className for the container */\n className?: string\n /** Custom className for the content area */\n contentClassName?: string\n /** Position of the action sheet */\n position?: 'bottom' | 'center'\n /** Height of the sheet */\n height?: 'auto' | 'full' | 'half'\n /** Whether clicking the backdrop should close the sheet (default: true) */\n closeOnBackdropClick?: boolean\n /** Title displayed in the header */\n title?: string\n /** Description displayed below the title */\n description?: string\n /** List of action items to render */\n items?: ActionSheetItem[]\n /** Whether to show a cancel button (default: true) */\n showCancel?: boolean\n}\n\n/**\n * ActionSheet - A flexible bottom sheet / modal component\n *\n * Pure custom content mode for maximum flexibility.\n * Compose your content using existing library components.\n *\n * Features:\n * - Smooth framer-motion animations with spring physics\n * - Multiple height options (auto, full, half)\n * - Position options (bottom, center)\n * - Dark mode support via CSS custom properties\n * - Keyboard navigation (ESC to close)\n * - Backdrop click to dismiss\n * - ARIA labels for accessibility\n *\n * @example\n * <ActionSheet\n * id=\"token-selector\"\n * currentActionSheetId={currentId}\n * isOpen={isOpen}\n * height=\"full\"\n * onClose={handleClose}\n * >\n * <div className=\"flex flex-col h-full bg-[var(--deframe-widget-color-bg-primary)] px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)]\">\n * <h2>Select Token</h2>\n * <Input placeholder=\"Search here...\" />\n * <ListItem>...</ListItem>\n * </div>\n * </ActionSheet>\n */\nexport const ActionSheet: React.FC<ActionSheetProps> = ({\n id,\n currentActionSheetId,\n isOpen,\n onClose,\n children,\n className = '',\n contentClassName = '',\n position = 'bottom',\n height = 'auto',\n closeOnBackdropClick = true,\n title,\n description,\n items,\n showCancel = true,\n}) => {\n const isThisSheetActive = isOpen && currentActionSheetId === id\n\n React.useEffect(() => {\n if (isThisSheetActive) {\n // Prevent body scroll when action sheet is open\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n\n return () => {\n document.body.style.overflow = ''\n }\n }, [isThisSheetActive])\n\n // Handle escape key\n React.useEffect(() => {\n if (!isThisSheetActive) return\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose?.()\n }\n }\n\n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isThisSheetActive, onClose])\n\n // Handle backdrop click\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (closeOnBackdropClick && e.target === e.currentTarget) {\n onClose?.()\n }\n }\n\n // Animation variants\n const backdropVariants = {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n exit: { opacity: 0 },\n }\n\n const sheetVariants = {\n hidden: position === 'bottom' ? { y: '100%' } : { opacity: 0, scale: 0.95 },\n visible:\n position === 'bottom'\n ? {\n y: '0%',\n transition: {\n type: 'spring' as const,\n damping: 25,\n stiffness: 300,\n },\n }\n : {\n opacity: 1,\n scale: 1,\n transition: {\n type: 'spring' as const,\n damping: 25,\n stiffness: 300,\n },\n },\n exit:\n position === 'bottom'\n ? {\n y: '100%',\n transition: {\n type: 'spring' as const,\n damping: 25,\n stiffness: 300,\n },\n }\n : {\n opacity: 0,\n scale: 0.95,\n transition: {\n type: 'spring' as const,\n damping: 25,\n stiffness: 300,\n },\n },\n }\n\n // Height classes\n const getHeightClass = () => {\n switch (height) {\n case 'full':\n return 'h-full'\n case 'half':\n return 'h-[50vh]'\n case 'auto':\n default:\n return 'h-auto'\n }\n }\n\n return (\n <AnimatePresence mode='wait'>\n {isThisSheetActive && (\n <motion.div\n className={twMerge(\n 'fixed inset-0 z-50 flex justify-center',\n position === 'bottom' ? 'items-end' : 'items-center',\n className\n )}\n role='dialog'\n aria-modal='true'\n onClick={handleBackdropClick}\n variants={backdropVariants}\n initial='hidden'\n animate='visible'\n exit='exit'\n transition={{ duration: 0.2 }}\n >\n {/* Backdrop */}\n <div\n className='absolute inset-0 bg-[var(--deframe-widget-color-bg-primary)]/50 backdrop-blur-sm'\n aria-hidden='true'\n />\n\n {/* Action Sheet Content */}\n <motion.div\n className={twMerge(\n 'relative w-full bg-[var(--deframe-widget-color-bg-secondary)] shadow-[0_20px_50px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_28%,transparent)] overflow-hidden',\n position === 'bottom'\n ? 'max-w-full rounded-t-[var(--deframe-widget-size-radius-xl)]'\n : 'max-w-lg rounded-[var(--deframe-widget-size-radius-xl)] mx-[var(--deframe-widget-size-gap-md)]',\n getHeightClass(),\n contentClassName\n )}\n variants={sheetVariants}\n initial='hidden'\n animate='visible'\n exit='exit'\n >\n {children}\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n\nexport default ActionSheet\n","import { twMerge } from 'tailwind-merge'\n\nexport interface DeframeComponentsProviderProps {\n /** Optional extra className applied to the `.deframe-widget` root */\n className?: string\n /** Child components */\n children: React.ReactNode\n}\n\nexport default function DeframeComponentsProvider ({\n className,\n children\n}: DeframeComponentsProviderProps) {\n return (\n <div\n className={twMerge('deframe-widget', className)}\n >\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoRowProps {\n children: React.ReactNode;\n borderBottom?: boolean;\n className?: string;\n}\n\nexport const InfoRow: React.FC<InfoRowProps> = ({ children, borderBottom, className }) => {\n const baseClasses = 'self-stretch inline-flex justify-between items-start'\n const borderClasses = borderBottom ? 'border-b border-[color:var(--deframe-widget-color-border-secondary)] pb-[var(--deframe-widget-size-padding-y-sm)]' : ''\n\n return (\n <div data-test-id='info-row' className={twMerge(baseClasses, borderClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoLabelProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const InfoLabel: React.FC<InfoLabelProps> = ({ children, className }) => {\n const baseClasses = '[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'\n\n return (\n <div data-test-id='info-label' className={twMerge(baseClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoValueProps {\n children: React.ReactNode;\n variant?: 'default' | 'success' | 'warning' | 'error';\n className?: string;\n}\n\nconst variantClasses = {\n default: 'text-[color:var(--deframe-widget-color-text-primary)]',\n success: 'text-[color:var(--deframe-widget-color-state-success)]',\n warning: 'text-[color:var(--deframe-widget-color-state-warning)]',\n error: 'text-[color:var(--deframe-widget-color-state-error)]',\n} as const\n\nexport const InfoValue: React.FC<InfoValueProps> = ({ children, variant = 'default', className }) => {\n const baseClasses = '[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)]'\n\n return (\n <div data-test-id='info-value' className={twMerge(baseClasses, variantClasses[variant], className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoRowWithIconProps {\n children: React.ReactNode;\n borderBottom?: boolean;\n className?: string;\n}\n\nexport const InfoRowWithIcon: React.FC<InfoRowWithIconProps> = ({ children, borderBottom, className }) => {\n const baseClasses = 'flex items-start justify-between h-[17px]'\n const borderClasses = borderBottom ? 'border-b border-[color:var(--deframe-widget-color-border-secondary)] pb-[var(--deframe-widget-size-padding-y-sm)]' : ''\n\n return (\n <div data-test-id='info-row-with-icon' className={twMerge(baseClasses, borderClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoRowIconLabelProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const InfoRowIconLabel: React.FC<InfoRowIconLabelProps> = ({ children, className }) => {\n const baseClasses = '[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'\n\n return (\n <div data-test-id='info-row-icon-label' className={twMerge(baseClasses, className)}>\n • {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoRowIconValueProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const InfoRowIconValue: React.FC<InfoRowIconValueProps> = ({ children, className }) => {\n const baseClasses = '[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)]'\n\n return (\n <div data-test-id='info-row-icon-value' className={twMerge(baseClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { HiChevronDown, HiChevronUp } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface CollapsibleInfoRowProps {\n label: string;\n value: string;\n children?: React.ReactNode;\n defaultOpen?: boolean;\n className?: string;\n collapseLabel: string;\n expandLabel: string;\n}\n\nexport const CollapsibleInfoRow: React.FC<CollapsibleInfoRowProps> = ({\n label,\n value,\n children,\n defaultOpen = false,\n className,\n collapseLabel,\n expandLabel,\n}) => {\n const [isOpen, setIsOpen] = React.useState(defaultOpen)\n\n const baseClasses = 'flex flex-col gap-[var(--deframe-widget-size-gap-sm)] w-full'\n\n return (\n <div data-test-id='collapsible-info-row' className={twMerge(baseClasses, className)}>\n <button\n type='button'\n onClick={() => setIsOpen(!isOpen)}\n className='flex items-start justify-between w-full text-left h-[18px] cursor-pointer'\n aria-expanded={isOpen}\n aria-label={`${isOpen ? collapseLabel : expandLabel} ${label}`}\n >\n <div className='flex items-start gap-[2px]'>\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {label}\n </span>\n <div className='flex items-center justify-center w-[18px] h-[18px]'>\n {isOpen\n ? (\n <HiChevronUp className='w-3 h-3 text-[color:var(--deframe-widget-color-text-secondary)]' />\n )\n : (\n <HiChevronDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-secondary)]' />\n )}\n </div>\n </div>\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {value}\n </span>\n </button>\n {isOpen && children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface BackgroundContainerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const BackgroundContainer: React.FC<BackgroundContainerProps> = ({ children, className }) => {\n const baseClasses = 'w-full flex-1 min-h-0 px-[var(--deframe-widget-size-padding-x-md)] bg-[var(--deframe-widget-color-bg-primary)] lg:bg-[var(--deframe-widget-color-bg-secondary)] text-[color:var(--deframe-widget-color-text-primary)] flex flex-col relative overflow-y-auto'\n\n return (\n <div data-test-id='background-container' className={twMerge(baseClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface SectionCardProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const SectionCard: React.FC<SectionCardProps> = ({ children, className }) => {\n const baseClasses = 'bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] shadow-[0_2px_8px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_18%,transparent)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col gap-[var(--deframe-widget-size-gap-sm)]'\n\n return (\n <div data-test-id='section-card' className={twMerge(baseClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface NavbarProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const Navbar: React.FC<NavbarProps> = ({ children, className }) => {\n const baseClasses = 'w-full px-[var(--deframe-widget-size-padding-x-sm)] pr-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-md)] border-b items-center border-[color:var(--deframe-widget-color-border-tertiary)] flex'\n\n return (\n <nav data-test-id='navbar' className={twMerge(baseClasses, className)}>\n {children}\n </nav>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface FlexColProps {\n children: React.ReactNode;\n className?: string;\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n}\n\nconst gapClasses = {\n xs: 'gap-[var(--deframe-widget-size-gap-xs)]',\n sm: 'gap-[var(--deframe-widget-size-gap-sm)]',\n md: 'gap-[var(--deframe-widget-size-gap-md)]',\n lg: 'gap-[var(--deframe-widget-size-gap-lg)]',\n} as const\n\nexport const FlexCol: React.FC<FlexColProps> = ({ children, className, gap = 'xs' }) => {\n const baseClasses = 'flex flex-col'\n\n return (\n <div data-test-id='flex-col' className={twMerge(baseClasses, gapClasses[gap], className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface FlexRowProps {\n children: React.ReactNode;\n className?: string;\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n}\n\nconst gapClasses = {\n xs: 'gap-[var(--deframe-widget-size-gap-xs)]',\n sm: 'gap-[var(--deframe-widget-size-gap-sm)]',\n md: 'gap-[var(--deframe-widget-size-gap-md)]',\n lg: 'gap-[var(--deframe-widget-size-gap-lg)]',\n} as const\n\nexport const FlexRow: React.FC<FlexRowProps> = ({ children, className, gap = 'xs' }) => {\n const baseClasses = 'flex items-center'\n\n return (\n <div data-test-id='flex-row' className={twMerge(baseClasses, gapClasses[gap], className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface ScrollableContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const ScrollableContent: React.FC<ScrollableContentProps> = ({ children, className }) => {\n const baseClasses = 'flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]'\n\n return (\n <div data-test-id='scrollable-content' className={twMerge(baseClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { HiChevronLeft } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\nimport { TextHeading } from '../texts'\n\nexport interface DetailsHeaderProps {\n title: string;\n onBack?: () => void;\n className?: string;\n backAriaLabel?: string;\n}\n\nexport const DetailsHeader: React.FC<DetailsHeaderProps> = ({ title, onBack, className, backAriaLabel = 'Back' }) => {\n const baseClasses = 'w-full px-[var(--deframe-widget-size-padding-x-sm)] pr-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-md)] border-b border-[color:var(--deframe-widget-color-border-tertiary)] flex items-center'\n\n return (\n <div data-test-id='details-header' className={twMerge(baseClasses, className)}>\n <button\n data-test-id='details-header-back-button'\n onClick={onBack}\n className='w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-brand-primary)] cursor-pointer'\n aria-label={backAriaLabel}\n >\n <HiChevronLeft className='w-6 h-6 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </button>\n <div className='flex-1 flex items-center'>\n <TextHeading variant='h-large'>{title}</TextHeading>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface HighRiskBadgeProps {\n className?: string;\n label?: string;\n}\n\nexport const HighRiskBadge: React.FC<HighRiskBadgeProps> = ({ className, label }) => {\n const baseClasses = 'inline-flex justify-start items-start gap-[var(--deframe-widget-size-gap-xs)]'\n\n return (\n <div data-test-id='high-risk-badge' className={twMerge(baseClasses, className)}>\n <div\n data-size='Small'\n data-type='Failed'\n className='h-6 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] opacity-95 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_20%,transparent)] rounded-[var(--deframe-widget-size-radius-md)] outline outline-1 outline-offset-[-1px] outline-[color:var(--deframe-widget-color-state-error)] flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]'\n >\n <div className='flex justify-start items-center gap-[var(--deframe-widget-size-gap-sm)].5'>\n <div className='justify-start text-[color:var(--deframe-widget-color-state-error)] [font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-regular)] font-[var(--deframe-widget-font-family)] leading-4'>\n {label}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface MediumRiskBadgeProps {\n className?: string;\n label?: string;\n}\n\nexport const MediumRiskBadge: React.FC<MediumRiskBadgeProps> = ({ className, label }) => {\n const baseClasses = 'inline-flex justify-start items-start gap-[var(--deframe-widget-size-gap-xs)]'\n\n return (\n <div data-test-id='medium-risk-badge' className={twMerge(baseClasses, className)}>\n <div\n data-size='Small'\n data-type='Warning'\n className='h-6 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] opacity-95 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_20%,transparent)] rounded-[var(--deframe-widget-size-radius-md)] outline outline-1 outline-offset-[-1px] outline-[color:var(--deframe-widget-color-state-warning)] flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]'\n >\n <div className='flex justify-start items-center gap-[var(--deframe-widget-size-gap-sm)].5'>\n <div className='justify-start text-[color:var(--deframe-widget-color-state-warning)] [font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-regular)] font-[var(--deframe-widget-font-family)] leading-4'>\n {label}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface LowRiskBadgeProps {\n className?: string;\n label: string;\n}\n\nexport const LowRiskBadge: React.FC<LowRiskBadgeProps> = ({ className, label }) => {\n const baseClasses = 'inline-flex justify-start items-start gap-[var(--deframe-widget-size-gap-xs)]'\n\n return (\n <div data-test-id='low-risk-badge' className={twMerge(baseClasses, className)}>\n <div\n data-size='Small'\n data-type='Completed'\n className='h-6 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] opacity-95 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-success)_20%,transparent)] rounded-[var(--deframe-widget-size-radius-md)] outline outline-1 outline-offset-[-1px] outline-[color:var(--deframe-widget-color-state-success)] flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]'\n >\n <div className='flex justify-start items-center gap-[var(--deframe-widget-size-gap-sm)].5'>\n <div className='justify-start text-[color:var(--deframe-widget-color-state-success)] [font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-regular)] font-[var(--deframe-widget-font-family)] leading-4'>\n {label}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface LoadingDotsProps {\n className?: string;\n}\n\n/**\n * Animated loading dots component with a bouncing effect\n * Used to indicate loading states throughout the application\n */\nexport const LoadingDots: React.FC<LoadingDotsProps> = ({ className = '' }) => {\n return (\n <span className={`flex gap-[var(--deframe-widget-size-gap-none)].5 ${className}`}>\n <span className='animate-bounce' style={{ animationDelay: '0ms', animationDuration: '1.4s' }}>.</span>\n <span className='animate-bounce' style={{ animationDelay: '200ms', animationDuration: '1.4s' }}>.</span>\n <span className='animate-bounce' style={{ animationDelay: '400ms', animationDuration: '1.4s' }}>.</span>\n </span>\n )\n}\n","import React from 'react'\nimport { HiOutlineClock } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\nimport { LoadingDots } from '../loading-dots'\n\nexport interface ProcessingBadgeProps {\n label?: string;\n className?: string;\n title?: string;\n size?: 'default' | 'compact';\n}\n\nexport const ProcessingBadge: React.FC<ProcessingBadgeProps> = ({\n label = 'Processing',\n className = '',\n title,\n size = 'default',\n}) => {\n const isCompact = size === 'compact'\n const baseClasses = [\n 'inline-flex max-w-fit items-center gap-[var(--deframe-widget-size-gap-xs)] rounded-[var(--deframe-widget-size-radius-full)] border',\n 'text-[color:var(--deframe-widget-color-state-info)]',\n 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-info)_18%,transparent)]',\n 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-info)_28%,transparent)]',\n ].join(' ')\n\n const sizeClasses = {\n default: 'px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)]',\n compact: 'px-[calc(var(--deframe-widget-size-padding-x-xs)+2px)] py-[2px]',\n } as const\n\n const processingBadgeClasses = twMerge(\n baseClasses,\n sizeClasses[isCompact ? 'compact' : 'default'],\n className\n )\n\n return (\n <div\n data-test-id='processing-badge'\n title={title}\n className={processingBadgeClasses}\n >\n <div className='flex min-w-0 items-center gap-[6px]'>\n <HiOutlineClock className={isCompact ? 'h-[12px] w-[12px] shrink-0' : 'h-[14px] w-[14px] shrink-0'} />\n <TextBody\n as='span'\n variant='text-small'\n className={twMerge(\n 'truncate text-[color:var(--deframe-widget-color-state-info)]',\n isCompact ? 'text-[11px] leading-[14px]' : ''\n )}\n >\n {label}\n </TextBody>\n </div>\n <span\n aria-hidden='true'\n className='flex shrink-0 items-center text-[color:var(--deframe-widget-color-state-info)] opacity-80'\n >\n <LoadingDots className={twMerge(isCompact ? 'text-[11px] leading-[14px]' : 'text-[12px] leading-[16px]')} />\n </span>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { AddressDisplay } from '../address'\n\n// Layout components\nexport interface FlexColCompProps {\n children: React.ReactNode;\n className?: string;\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n}\n\nconst gapClasses = {\n xs: 'gap-[var(--deframe-widget-size-gap-xs)]',\n sm: 'gap-[var(--deframe-widget-size-gap-sm)]',\n md: 'gap-[var(--deframe-widget-size-gap-md)]',\n lg: 'gap-[var(--deframe-widget-size-gap-lg)]',\n} as const\n\nexport const HistoryFlexCol: React.FC<FlexColCompProps> = ({ children, className, gap = 'xs' }) => (\n <div data-test-id='history-flex-col' className={twMerge('flex flex-col', gapClasses[gap], className)}>\n {children}\n </div>\n)\n\nexport interface FlexRowCompProps {\n children: React.ReactNode;\n className?: string;\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n}\n\nexport const HistoryFlexRow: React.FC<FlexRowCompProps> = ({ children, className, gap = 'xs' }) => (\n <div data-test-id='history-flex-row' className={twMerge('flex items-center', gapClasses[gap], className)}>\n {children}\n </div>\n)\n\nexport const HistoryScrollableContent: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <div data-test-id='history-scrollable-content' className='flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]'>\n {children}\n </div>\n)\n\n// Typography components\nexport const TransactionTypeLabel: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='transaction-type-label' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {children}\n </p>\n)\n\nexport const StrategyName: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='strategy-name' className='[font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {children}\n </p>\n)\n\nexport const Amount: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='amount' className='[font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {children}\n </p>\n)\n\nexport const AmountInUsd: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='amount-in-usd' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~ {children}\n </p>\n)\n\nexport const EmptyValue: React.FC = () => (\n <p data-test-id='empty-value' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n -\n </p>\n)\n\n// Icon components\nexport interface TokenIconProps {\n src: string;\n alt: string;\n}\n\nexport const TokenIcon: React.FC<TokenIconProps> = ({ src, alt }) => (\n <img\n data-test-id='token-icon'\n src={src}\n alt={alt}\n className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]'\n onError={(e) => {\n const fallbackText = encodeURIComponent((alt || 'TOK').slice(0, 3).toUpperCase());\n (e.target as HTMLImageElement).src = `https://placehold.co/40x40?text=${fallbackText}`\n }}\n />\n)\n\n// Status badge\nconst STATUS_STYLES = {\n success: {\n bg: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-success)_12%,transparent)]',\n dot: 'bg-[var(--deframe-widget-color-state-success)]',\n },\n pending: {\n bg: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_12%,transparent)]',\n dot: 'bg-[var(--deframe-widget-color-state-warning)]',\n },\n failed: {\n bg: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_12%,transparent)]',\n dot: 'bg-[var(--deframe-widget-color-state-error)]',\n },\n refunded: {\n bg: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-text-secondary)_12%,transparent)]',\n dot: 'bg-[var(--deframe-widget-color-text-secondary)]',\n },\n} as const\n\nexport type StatusBadgeTone = keyof typeof STATUS_STYLES\nexport type HistoryDetailsStatus = 'SUCCESS' | 'PENDING' | 'FAILED' | 'REFUNDED'\n\nexport function resolveStatusBadgeTone (status: HistoryDetailsStatus = 'SUCCESS'): StatusBadgeTone {\n if (status === 'PENDING') return 'pending'\n if (status === 'FAILED') return 'failed'\n if (status === 'REFUNDED') return 'refunded'\n return 'success'\n}\n\nexport const StatusBadge: React.FC<{\n children: React.ReactNode;\n tone?: StatusBadgeTone;\n}> = ({ children, tone = 'success' }) => (\n <div data-test-id='status-badge' className={`${STATUS_STYLES[tone].bg} flex items-center gap-[var(--deframe-widget-size-gap-xs)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] rounded-[var(--deframe-widget-size-radius-lg)]`}>\n <span className={`w-2 h-2 rounded-[var(--deframe-widget-size-radius-full)] ${STATUS_STYLES[tone].dot}`} />\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {children}\n </span>\n </div>\n)\n\nexport const SuccessBadge: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <StatusBadge tone='success'>{children}</StatusBadge>\n)\n\n// Transaction ID with truncated display and copy button\nconst truncateHash = (hash: string, chars: number = 6): string => {\n if (hash.length <= chars * 2 + 3) return hash\n return `${hash.slice(0, chars + 2)}...${hash.slice(-chars)}`\n}\n\nexport interface TransactionIdProps {\n hash: string | null;\n}\n\nexport const TransactionId: React.FC<TransactionIdProps> = ({ hash }) => {\n if (!hash) {\n return <span data-test-id='transaction-id' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-primary)]'>-</span>\n }\n\n return (\n <div data-test-id='transaction-id' className='flex items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {truncateHash(hash)}\n </span>\n <AddressDisplay\n address={hash}\n className='border-none bg-transparent px-[var(--deframe-widget-size-padding-x-none)] py-[var(--deframe-widget-size-padding-y-none)] gap-[var(--deframe-widget-size-gap-none)]'\n textClassName='hidden'\n />\n </div>\n )\n}\n\n// Explorer link\nexport interface ExplorerLinkProps {\n href: string;\n children: React.ReactNode;\n}\n\nexport const ExplorerLink: React.FC<ExplorerLinkProps> = ({ href, children }) => (\n <a\n data-test-id='explorer-link'\n href={href}\n target='_blank'\n rel='noopener noreferrer'\n className='text-[color:var(--deframe-widget-color-brand-primary)] underline [font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)] font-[var(--deframe-widget-font-family)]'\n >\n {children}\n </a>\n)\n\n// Two-line value\nexport interface TwoLineValueProps {\n primary: React.ReactNode;\n secondary: React.ReactNode;\n}\n\nexport const TwoLineValue: React.FC<TwoLineValueProps> = ({ primary, secondary }) => (\n <HistoryFlexCol className='items-end'>\n <p data-test-id='two-line-value-primary' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)] [font-weight:var(--deframe-widget-font-weight-semibold)]'>\n {primary}\n </p>\n <p data-test-id='two-line-value-secondary' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {secondary}\n </p>\n </HistoryFlexCol>\n)\n\n// Error state\nexport const NotFoundMessage: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <div data-test-id='not-found-message' className='flex flex-col items-center justify-center h-full'>\n <p className='text-[color:var(--deframe-widget-color-text-primary)]'>{children}</p>\n </div>\n)\n","import { IoCheckmarkOutline, IoTimeOutline, IoAlertCircleOutline } from 'react-icons/io5'\nimport type { TransactionStepStatus } from '../../types/transaction'\n\nexport interface StepStatusIconProps {\n status: TransactionStepStatus;\n}\n\n/**\n * Renders a step status icon based on the step status\n * Only three icon types: success (checkmark), timer (clock), and error (alert)\n */\nexport function StepStatusIcon ({ status }: StepStatusIconProps) {\n switch (status) {\n case 'completed':\n return (\n <div className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex items-center justify-center flex-shrink-0'>\n <IoCheckmarkOutline className='w-4 h-4 text-[color:var(--deframe-widget-color-state-success)]' />\n </div>\n )\n case 'processing':\n return (\n <div className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex items-center justify-center flex-shrink-0'>\n <IoTimeOutline className='w-4 h-4 text-[color:var(--deframe-widget-color-state-warning)]' />\n </div>\n )\n case 'failed':\n return (\n <div className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex items-center justify-center flex-shrink-0'>\n <IoAlertCircleOutline className='w-4 h-4 text-[color:var(--deframe-widget-color-state-error)]' />\n </div>\n )\n }\n}\n","import type { TransactionStep } from '../../types/transaction'\n\nexport interface StepStatusTextProps {\n step: TransactionStep;\n completedText: string;\n processingText: string;\n failedText: string;\n viewOnExplorerText: string;\n}\n\n/**\n * Renders the status text and optional explorer link for a step\n */\nexport function StepStatusText ({\n step,\n completedText,\n processingText,\n failedText,\n viewOnExplorerText,\n}: StepStatusTextProps) {\n // Use custom status text if provided\n if (step.statusText) {\n const textColorClass =\n step.status === 'completed'\n ? 'text-[color:var(--deframe-widget-color-text-primary)]'\n : step.status === 'processing'\n ? 'text-[color:var(--deframe-widget-color-text-secondary)]'\n : step.status === 'failed'\n ? 'text-[color:var(--deframe-widget-color-state-error)]'\n : 'text-[color:var(--deframe-widget-color-text-primary-disabled)]'\n\n return <span className={`[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] ${textColorClass}`}>{step.statusText}</span>\n }\n\n // Show explorer link if completed and URL exists\n if (step.status === 'completed' && step.explorerUrl) {\n return (\n <a\n href={step.explorerUrl}\n target='_blank'\n rel='noopener noreferrer'\n className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-brand-primary)] underline hover:no-underline'\n >\n {viewOnExplorerText}\n </a>\n )\n }\n\n // Default status text\n const defaultText =\n step.status === 'completed'\n ? completedText\n : step.status === 'processing'\n ? processingText\n : failedText\n\n const textColorClass =\n step.status === 'completed'\n ? 'text-[color:var(--deframe-widget-color-text-primary)]'\n : step.status === 'processing'\n ? 'text-[color:var(--deframe-widget-color-text-secondary)]'\n : 'text-[color:var(--deframe-widget-color-state-error)]'\n\n return <span className={`[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] ${textColorClass}`}>{defaultText}</span>\n}\n","import type { TransactionStep } from '../../types/transaction'\nimport { StepStatusText } from './StepStatusText'\n\nexport interface StepDisplayProps {\n step: TransactionStep;\n completedText: string;\n processingText: string;\n failedText: string;\n viewOnExplorerText: string;\n}\n\n/**\n * Renders a single processing step with icon, label, and status\n */\nexport function StepDisplay ({ step, completedText, processingText, failedText, viewOnExplorerText }: StepDisplayProps) {\n return (\n <div className='flex items-start justify-between gap-[var(--deframe-widget-size-gap-md)] w-full'>\n <div className='flex-1 min-w-0'>\n <p className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-primary)] [font-weight:var(--deframe-widget-font-weight-medium)]'>\n {step.label}\n </p>\n </div>\n <div className='flex-shrink-0'>\n {step.value\n ? (\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {step.value}\n </span>\n )\n : (\n <StepStatusText step={step} completedText={completedText} processingText={processingText} failedText={failedText} viewOnExplorerText={viewOnExplorerText} />\n )}\n </div>\n </div>\n )\n}\n","/**\n * Transaction Processing Details Component\n *\n * Displays a visual breakdown of transaction processing steps with status icons,\n * vertical connectors, and explorer links for deposit/withdraw flows.\n */\n\nimport { SummaryDetails } from '../details'\nimport type { TransactionStep } from '../../types/transaction'\nimport { StepStatusIcon } from './StepStatusIcon'\nimport { StepDisplay } from './StepDisplay'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface TransactionProcessingDetailsProps {\n /** Array of transaction steps to display */\n steps: TransactionStep[];\n /** Optional CSS class name */\n className?: string;\n /** Whether the details section is open by default */\n defaultOpen?: boolean;\n /** All translated strings for this component */\n labels: TransactionProcessingDetailsLabels;\n}\n\n/**\n * Displays transaction processing steps with visual breakdown using vertical connectors\n * Similar to SwapProcessingDetails but designed for deposit/withdraw flows\n */\nexport function TransactionProcessingDetails ({\n steps,\n className = 'bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]',\n defaultOpen = true,\n labels,\n}: TransactionProcessingDetailsProps) {\n if (!steps || steps.length === 0) {\n return null\n }\n\n const getProcessingSteps = () => {\n return (\n <div className='flex flex-col w-full'>\n {steps.map((step, index) => (\n <div key={`step-${index}`} className='flex gap-[var(--deframe-widget-size-gap-sm)]'>\n {/* Icon column with vertical connector */}\n <div className='flex flex-col items-center'>\n {step.status && <StepStatusIcon status={step.status} />}\n {index < steps.length - 1 && step.status && (\n <div className='w-px flex-1 min-h-[16px] bg-[var(--deframe-widget-color-bg-primary-dark)] my-[var(--deframe-widget-size-gap-xs)]' />\n )}\n </div>\n\n {/* Content column */}\n <div className='flex-1 pb-[var(--deframe-widget-size-padding-y-sm)] min-w-0'>\n <StepDisplay step={step} completedText={labels.completedText} processingText={labels.processingText} failedText={labels.failedText} viewOnExplorerText={labels.viewOnExplorerText} />\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n // Build items array for SummaryDetails\n const items = [\n {\n label: '',\n value: getProcessingSteps(),\n valueClassName: 'flex flex-col gap-[var(--deframe-widget-size-gap-none)] w-full',\n },\n ]\n\n return (\n <SummaryDetails\n title={labels.title}\n items={items}\n defaultOpen={defaultOpen}\n className={className}\n />\n )\n}\n","import React from 'react'\nimport { DetailsHeader } from '../details-header'\nimport { SectionCard, FlexCol, FlexRow, ScrollableContent, BackgroundContainer } from '../layout'\nimport { InfoRow, InfoLabel, InfoValue } from '../info-display'\nimport {\n TransactionTypeLabel,\n Amount,\n AmountInUsd,\n TokenIcon,\n StatusBadge,\n TransactionId,\n ExplorerLink,\n TwoLineValue,\n resolveStatusBadgeTone,\n type HistoryDetailsStatus,\n} from './HistoryDetailsComponents'\nimport type { HistoryDetailsLabels } from './history-details-labels'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface HistoryAssetViewProps {\n iconUrl: string;\n symbol: string;\n amount: string;\n amountInUSD: string | null;\n}\n\nexport interface HistoryDetailsViewProps {\n transactionTypeLabel: string;\n symbol: string;\n amountWithSymbol: string;\n amountInUsdFormatted: string;\n shouldShowFlow: boolean;\n assetIn?: HistoryAssetViewProps;\n assetOut?: HistoryAssetViewProps;\n primaryAssetIconUrl: string;\n protocolLabel: string;\n statusLabel: string;\n txHash: string | null;\n date: string;\n explorerUrl: string | null;\n status?: HistoryDetailsStatus;\n processingSteps?: TransactionStep[];\n processingDetailsLabels?: TransactionProcessingDetailsLabels;\n onClose: () => void;\n labels: HistoryDetailsLabels;\n}\n\nexport const HistoryDepositDetailsView: React.FC<HistoryDetailsViewProps> = ({\n transactionTypeLabel,\n symbol,\n amountWithSymbol,\n amountInUsdFormatted,\n shouldShowFlow,\n assetIn,\n assetOut,\n primaryAssetIconUrl,\n protocolLabel,\n statusLabel,\n txHash,\n date,\n explorerUrl,\n status = 'SUCCESS',\n processingSteps,\n processingDetailsLabels,\n onClose,\n labels,\n}) => {\n return (\n <BackgroundContainer>\n <DetailsHeader title={labels.transactionDetailsTitle} onBack={onClose} />\n\n <ScrollableContent>\n <FlexCol gap='lg'>\n {/* Transaction Summary Card */}\n <SectionCard className='!p-[24px]'>\n <FlexCol gap='xs'>\n <TransactionTypeLabel>{transactionTypeLabel}</TransactionTypeLabel>\n\n {shouldShowFlow && assetIn && assetOut\n ? (\n <FlexCol gap='sm'>\n <FlexRow gap='sm'>\n <TokenIcon src={assetIn.iconUrl} alt={assetIn.symbol} />\n <FlexCol>\n <Amount>\n {assetIn.amount} {assetIn.symbol}\n </Amount>\n {assetIn.amountInUSD\n ? (\n <AmountInUsd>{assetIn.amountInUSD}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n <FlexRow gap='sm'>\n <TokenIcon src={assetOut.iconUrl} alt={assetOut.symbol} />\n <FlexCol>\n <Amount>\n {assetOut.amount} {assetOut.symbol}\n </Amount>\n {assetOut.amountInUSD\n ? (\n <AmountInUsd>{assetOut.amountInUSD}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n </FlexCol>\n )\n : (\n <FlexRow gap='sm'>\n <TokenIcon src={primaryAssetIconUrl} alt={symbol} />\n <FlexCol>\n <FlexRow gap='xs'>\n <Amount>{amountWithSymbol}</Amount>\n {amountInUsdFormatted !== '-'\n ? (\n <AmountInUsd>{amountInUsdFormatted}</AmountInUsd>\n )\n : null}\n </FlexRow>\n </FlexCol>\n </FlexRow>\n )}\n </FlexCol>\n </SectionCard>\n\n {/* Details Card */}\n <SectionCard className='!px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'>\n <FlexCol gap='sm'>\n <InfoRow borderBottom>\n <InfoLabel>{labels.currencyLabel}</InfoLabel>\n <InfoValue>{symbol}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.totalAmountLabel}</InfoLabel>\n <TwoLineValue primary={amountInUsdFormatted} secondary={amountWithSymbol} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.operationCostLabel}</InfoLabel>\n <InfoValue>{labels.operationCostSponsoredLabel}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.protocolLabel}</InfoLabel>\n <InfoValue>{protocolLabel}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.statusLabel}</InfoLabel>\n <StatusBadge tone={resolveStatusBadgeTone(status)}>{statusLabel}</StatusBadge>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.transactionIdLabel}</InfoLabel>\n <TransactionId hash={txHash} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.dateLabel}</InfoLabel>\n <InfoValue>{date}</InfoValue>\n </InfoRow>\n\n {explorerUrl && (\n <InfoRow>\n <InfoLabel>{labels.transactionLabel}</InfoLabel>\n <ExplorerLink href={explorerUrl}>{labels.viewOnExplorerLabel}</ExplorerLink>\n </InfoRow>\n )}\n </FlexCol>\n </SectionCard>\n\n {processingSteps?.length && processingDetailsLabels\n ? (\n <TransactionProcessingDetails\n steps={processingSteps}\n labels={processingDetailsLabels}\n defaultOpen\n />\n )\n : null}\n </FlexCol>\n </ScrollableContent>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\nimport { BackgroundContainer } from '../layout/BackgroundContainer'\nimport { DetailsHeader } from '../details-header'\nimport { SectionCard, FlexCol, FlexRow, ScrollableContent } from '../layout'\nimport { InfoRow, InfoLabel, InfoValue } from '../info-display'\nimport {\n TransactionTypeLabel,\n Amount,\n AmountInUsd,\n TokenIcon,\n StatusBadge,\n TransactionId,\n ExplorerLink,\n TwoLineValue,\n resolveStatusBadgeTone,\n} from './HistoryDetailsComponents'\nimport type { HistoryAssetViewProps, HistoryDetailsViewProps } from './HistoryDepositDetailsView'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\n\nexport type { HistoryDetailsViewProps, HistoryAssetViewProps }\n\nexport const HistoryWithdrawDetailsView: React.FC<HistoryDetailsViewProps> = ({\n transactionTypeLabel,\n symbol,\n amountWithSymbol,\n amountInUsdFormatted,\n shouldShowFlow,\n assetIn,\n assetOut,\n primaryAssetIconUrl,\n protocolLabel,\n statusLabel,\n txHash,\n date,\n explorerUrl,\n status = 'SUCCESS',\n processingSteps,\n processingDetailsLabels,\n onClose,\n labels,\n}) => {\n return (\n <BackgroundContainer>\n <DetailsHeader title={labels.transactionDetailsTitle} onBack={onClose} />\n\n <ScrollableContent>\n <FlexCol gap='lg'>\n <SectionCard className='!p-[24px]'>\n <FlexCol gap='xs'>\n <TransactionTypeLabel>{transactionTypeLabel}</TransactionTypeLabel>\n\n {shouldShowFlow && assetIn && assetOut\n ? (\n <FlexCol gap='sm'>\n <FlexRow gap='sm'>\n <TokenIcon src={assetIn.iconUrl} alt={assetIn.symbol} />\n <FlexCol>\n <Amount>\n {assetIn.amount} {assetIn.symbol}\n </Amount>\n {assetIn.amountInUSD\n ? (\n <AmountInUsd>{assetIn.amountInUSD}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n <FlexRow gap='sm'>\n <TokenIcon src={assetOut.iconUrl} alt={assetOut.symbol} />\n <FlexCol>\n <Amount>\n {assetOut.amount} {assetOut.symbol}\n </Amount>\n {assetOut.amountInUSD\n ? (\n <AmountInUsd>{assetOut.amountInUSD}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n </FlexCol>\n )\n : (\n <FlexRow gap='sm'>\n <TokenIcon src={primaryAssetIconUrl} alt={symbol} />\n <FlexCol>\n <FlexRow gap='xs'>\n <Amount>{amountWithSymbol}</Amount>\n {amountInUsdFormatted !== '-'\n ? (\n <AmountInUsd>{amountInUsdFormatted}</AmountInUsd>\n )\n : null}\n </FlexRow>\n </FlexCol>\n </FlexRow>\n )}\n </FlexCol>\n </SectionCard>\n\n <SectionCard className='!px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'>\n <FlexCol gap='sm'>\n <InfoRow borderBottom>\n <InfoLabel>{labels.currencyLabel}</InfoLabel>\n <InfoValue>{symbol}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.totalAmountLabel}</InfoLabel>\n <TwoLineValue primary={amountInUsdFormatted} secondary={amountWithSymbol} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.operationCostLabel}</InfoLabel>\n <InfoValue>{labels.operationCostSponsoredLabel}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.protocolLabel}</InfoLabel>\n <InfoValue>{protocolLabel}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.statusLabel}</InfoLabel>\n <StatusBadge tone={resolveStatusBadgeTone(status)}>{statusLabel}</StatusBadge>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.transactionIdLabel}</InfoLabel>\n <TransactionId hash={txHash} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.dateLabel}</InfoLabel>\n <InfoValue>{date}</InfoValue>\n </InfoRow>\n\n {explorerUrl && (\n <InfoRow>\n <InfoLabel>{labels.transactionLabel}</InfoLabel>\n <ExplorerLink href={explorerUrl}>{labels.viewOnExplorerLabel}</ExplorerLink>\n </InfoRow>\n )}\n </FlexCol>\n </SectionCard>\n\n {processingSteps?.length && processingDetailsLabels\n ? (\n <TransactionProcessingDetails\n steps={processingSteps}\n labels={processingDetailsLabels}\n defaultOpen\n />\n )\n : null}\n </FlexCol>\n </ScrollableContent>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InputFieldRegistration {\n name: string;\n onBlur: React.FocusEventHandler<HTMLInputElement>;\n ref: React.Ref<HTMLInputElement>;\n}\n\nexport interface SwapAmountInputViewProps {\n value: string;\n hasError: boolean;\n onChange: (value: string) => void;\n maxFractionDigits?: number;\n field?: InputFieldRegistration;\n ariaLabel?: string;\n className?: string;\n}\n\nexport const SwapAmountInputView: React.FC<SwapAmountInputViewProps> = ({\n value,\n hasError,\n onChange,\n maxFractionDigits = 6,\n field,\n ariaLabel = 'Amount to swap',\n className,\n}) => {\n const normalizeAmountInput = (raw: string) => {\n let val = raw.replace(/[^\\d.,]/g, '')\n const endsWithSeparator = /[.,]$/.test(val)\n val = val.replace(/,/g, '.')\n const firstDot = val.indexOf('.')\n if (firstDot !== -1) {\n const intPart = val.slice(0, firstDot)\n const fractional = val\n .slice(firstDot + 1)\n .replace(/\\./g, '')\n .slice(0, maxFractionDigits)\n if (fractional.length > 0) {\n val = `${intPart}.${fractional}`\n } else {\n val = endsWithSeparator ? `${intPart}.` : intPart\n }\n }\n if (val.startsWith('.')) {\n val = `0${val}`\n }\n return val\n }\n\n const baseClasses = '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] bg-transparent outline-none text-right w-full min-w-[120px] placeholder:text-[color:var(--deframe-widget-color-text-primary-disabled)]'\n const colorClasses = hasError\n ? 'text-[color:var(--deframe-widget-color-state-error)]'\n : 'text-[color:var(--deframe-widget-color-text-primary)]'\n\n return (\n <input\n data-test-id='swap-flow-amount-input'\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n autoComplete='off'\n aria-label={ariaLabel}\n min='0'\n step='any'\n value={value}\n className={twMerge(baseClasses, colorClasses, className)}\n {...field}\n onChange={(event) => {\n let normalized = normalizeAmountInput(event.target.value)\n if (normalized && parseFloat(normalized) < 0) {\n normalized = '0'\n }\n onChange(normalized)\n }}\n onWheel={(event: React.WheelEvent<HTMLInputElement>) => {\n event.currentTarget.blur()\n }}\n />\n )\n}\n","import React from 'react'\nimport { HiArrowRight } from 'react-icons/hi2'\nimport { ActionSheet } from '../action-sheet'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { TextBody, TextHeading } from '../texts'\nimport { HighRiskBadge } from '../badges/HighRiskBadge'\nimport { LowRiskBadge } from '../badges/LowRiskBadge'\nimport { MediumRiskBadge } from '../badges/MediumRiskBadge'\nimport { BackgroundContainer, Navbar } from '../layout'\nimport { CloseButton } from '../buttons'\n\nexport interface ChooseAStrategyActionsheetViewProps {\n isOpen: boolean;\n currentActionSheetId: string | null;\n assetName: string;\n apy: string;\n logoUrl: string;\n strategyId: string;\n riskLevel: 'low' | 'medium' | 'high';\n onStrategyClick: () => void;\n onClose: () => void;\n yieldLabel?: string;\n apyLabel?: string;\n riskBadgeLabels: { low: string; medium: string; high: string };\n closeAriaLabel?: string;\n}\n\nexport const ChooseAStrategyActionsheetView: React.FC<ChooseAStrategyActionsheetViewProps> = ({\n isOpen,\n currentActionSheetId,\n assetName,\n apy,\n logoUrl,\n riskLevel,\n onStrategyClick,\n onClose,\n yieldLabel,\n apyLabel = 'APY',\n riskBadgeLabels,\n closeAriaLabel = 'Close',\n}) => {\n const resolvedYieldLabel = yieldLabel ?? `Yield ${assetName}`\n\n const badges = {\n low: <LowRiskBadge label={riskBadgeLabels.low} />,\n medium: <MediumRiskBadge label={riskBadgeLabels.medium} />,\n high: <HighRiskBadge label={riskBadgeLabels.high} />,\n }\n\n const Badge = badges[riskLevel]\n\n return (\n <div data-test-id='choose-strategy-actionsheet' className='flex justify-center'>\n <ActionSheet\n id='choose-strategy'\n currentActionSheetId={currentActionSheetId}\n isOpen={isOpen}\n onClose={onClose}\n position='bottom'\n height='full'\n contentClassName='w-full max-w-[620px] mx-auto'\n >\n <BackgroundContainer className='flex flex-col h-full'>\n <Navbar>\n <CloseButton onClick={onClose} ariaLabel={closeAriaLabel} />\n </Navbar>\n <div className='flex flex-col flex-1 w-full px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)] overflow-hidden'>\n <div className='flex-shrink-0'>\n <TextHeading>{resolvedYieldLabel}</TextHeading>\n <br />\n </div>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)] w-full mt-[var(--deframe-widget-size-gap-md)] overflow-y-auto flex-1 min-h-0'>\n <ListItem className='flex-shrink-0' onClick={onStrategyClick}>\n <ListItemLeftSide>\n <img src={logoUrl} alt={assetName} className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)]' />\n </ListItemLeftSide>\n <ListItemContent className='gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody>{resolvedYieldLabel}</TextBody>\n <TextBody variant='text-small'>{Badge}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <div className='flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <span className='text-[color:var(--deframe-widget-color-state-success)]'>{apy}% {apyLabel}</span>\n <HiArrowRight className='w-4 h-4' />\n </div>\n </ListItemRightSide>\n </ListItem>\n </div>\n </div>\n </BackgroundContainer>\n </ActionSheet>\n </div>\n )\n}\n","import React from 'react'\nimport { TextBody, TextHeading } from '../texts'\nimport { SummaryDetails } from '../details'\nimport { PrimaryButton } from '../buttons'\nimport { BackgroundContainer } from '../layout'\nimport { DetailsHeader } from '../details-header'\n\nexport interface StrategyDetailsViewProps {\n logoUrl: string;\n title: string;\n description: string;\n strategyInfo: { label: string; value: string }[];\n onBack?: () => void;\n onDeposit?: () => void;\n headerTitle?: string;\n strategyInfoTitle?: string;\n depositButtonLabel?: string;\n backAriaLabel?: string;\n error?: string;\n notFoundMessage?: string;\n}\n\nexport const StrategyDetailsView: React.FC<StrategyDetailsViewProps> = ({\n logoUrl,\n title,\n description,\n strategyInfo,\n onBack,\n onDeposit,\n headerTitle = 'Details',\n strategyInfoTitle = 'Strategy Info',\n depositButtonLabel = 'Deposit',\n backAriaLabel = 'Back',\n error,\n notFoundMessage,\n}) => {\n if (error) {\n return (\n <BackgroundContainer>\n <div className='text-text-secondary dark:text-text-secondary-dark p-md'>{error}</div>\n </BackgroundContainer>\n )\n }\n\n if (notFoundMessage) {\n return (\n <BackgroundContainer>\n <div className='text-text-secondary dark:text-text-secondary-dark p-md'>{notFoundMessage}</div>\n </BackgroundContainer>\n )\n }\n\n return (\n <BackgroundContainer>\n <DetailsHeader title={headerTitle} onBack={onBack} backAriaLabel={backAriaLabel} />\n\n <div data-test-id='strategy-details-content' className='flex-1 min-h-0 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] py-[var(--deframe-widget-size-padding-y-lg)] pb-[var(--deframe-widget-size-padding-y-xxl)]'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-lg)] min-h-full'>\n <div className='inline-flex flex-col items-start gap-[var(--deframe-widget-size-gap-sm)]'>\n <img data-test-id='strategy-logo' src={logoUrl} alt={title} className='w-20 h-20 rounded-[var(--deframe-widget-size-radius-full)]' />\n <TextHeading variant='h5'>{title}</TextHeading>\n </div>\n\n <TextBody variant='text-small'>{description}</TextBody>\n\n <SummaryDetails\n title={strategyInfoTitle}\n items={strategyInfo}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n />\n </div>\n </div>\n\n <div data-test-id='strategy-details-footer' className='sticky bottom-0 left-0 right-0 border-t border-[color:var(--deframe-widget-color-border-tertiary)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'>\n <PrimaryButton onClick={onDeposit} className='w-full'>\n {depositButtonLabel}\n </PrimaryButton>\n </div>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\n\nexport interface ProgressIndicatorProps {\n /** Progress percentage (0-100) */\n progress: number;\n /** Optional className for custom styling */\n className?: string;\n}\n\nexport const ProgressIndicator: React.FC<ProgressIndicatorProps> = ({\n progress,\n className = ''\n}) => {\n const clampedProgress = Math.min(100, Math.max(0, progress))\n\n return (\n <div className={`relative h-[12px] w-full ${className}`}>\n <div className='absolute left-0 right-0 top-1/2 -translate-y-1/2 flex items-center'>\n <div\n className='h-[4px] bg-[var(--deframe-widget-color-brand-primary)] rounded-[var(--deframe-widget-size-radius-md)] transition-all duration-300'\n style={{ width: `${clampedProgress}%` }}\n />\n <div className='flex-1 h-[4px] bg-[var(--deframe-widget-color-bg-tertiary)] rounded-[var(--deframe-widget-size-radius-md)] ml-[var(--deframe-widget-size-gap-xs)]' />\n </div>\n </div>\n )\n}\n","import React, { useState, useEffect } from 'react'\nimport { MdOutlineSearch } from 'react-icons/md'\n\nexport interface SearchInputProps {\n /**\n * Placeholder text (default: \"Search\")\n */\n placeholder?: string;\n /**\n * Current value\n */\n value?: string;\n /**\n * Whether the input is disabled\n */\n disabled?: boolean;\n /**\n * Change handler — called immediately on every keystroke\n */\n onChange?: (value: string) => void;\n /**\n * Search handler — called immediately on every keystroke (debounce in the container)\n */\n onSearch?: (value: string) => void;\n /**\n * Additional CSS class names for container\n */\n className?: string;\n /**\n * Additional CSS class names for input element (e.g., custom background)\n */\n inputClassName?: string;\n /**\n * Whether the input should be auto focused\n */\n autoFocus?: boolean;\n /**\n * test id for the container\n */\n containerTestId?: string;\n /**\n * test id for the input element\n */\n inputTestId?: string;\n}\n\n/**\n * SearchInput - Search input component with search icon\n */\nexport const SearchInput: React.FC<SearchInputProps> = ({\n placeholder = 'Search',\n value: controlledValue,\n disabled = false,\n onChange,\n onSearch,\n className = '',\n inputClassName,\n autoFocus = false,\n containerTestId,\n inputTestId,\n}) => {\n const [internalValue, setInternalValue] = useState(controlledValue || '')\n\n // Update internal value when controlled value changes\n useEffect(() => {\n if (controlledValue !== undefined) {\n setInternalValue(controlledValue)\n }\n }, [controlledValue])\n\n const handleInputChange = (newValue: string) => {\n setInternalValue(newValue)\n onChange?.(newValue)\n onSearch?.(newValue)\n }\n\n return (\n <div className={`flex-1 flex items-center relative ${className}`} data-testid={containerTestId}>\n <input\n data-testid={inputTestId}\n type='text'\n value={internalValue}\n placeholder={placeholder}\n disabled={disabled}\n autoFocus={autoFocus}\n onChange={(e) => handleInputChange(e.target.value)}\n className={[\n 'w-full h-full rounded-[var(--deframe-widget-size-radius-xs)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] pr-[var(--deframe-widget-size-padding-x-xxl)] leading-normal tracking-wide',\n !inputClassName ? 'bg-[var(--deframe-widget-color-bg-secondary)]' : '',\n 'placeholder:text-[color:var(--deframe-widget-color-text-primary-disabled)] text-[color:var(--deframe-widget-color-text-primary)]',\n 'focus:outline-none focus:ring-2 focus:ring-brand-primary',\n disabled ? 'cursor-not-allowed opacity-50' : '',\n inputClassName || '',\n ].filter(Boolean).join(' ')}\n />\n <MdOutlineSearch className='w-4 h-4 text-[color:var(--deframe-widget-color-text-secondary)] absolute right-4' />\n </div>\n )\n}\n\nexport default SearchInput\n","import React from 'react'\nimport { MdOutlineSearchOff } from 'react-icons/md'\nimport { TextBody, TextHeading } from '../texts'\n\nexport interface SearchEmptyStateProps {\n title: string;\n description: string;\n}\n\nexport const SearchEmptyState: React.FC<SearchEmptyStateProps> = ({\n title,\n description,\n}) => {\n return (\n <div className='w-full py-[var(--deframe-widget-size-padding-y-md)] bg-[var(--deframe-widget-color-bg-primary)] rounded-[var(--deframe-widget-size-radius-md)] flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-sm)] h-full'>\n <div className='w-full flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-md)] py-[var(--deframe-widget-size-padding-y-xxl)]'>\n <div className='flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-md)] text-center'>\n <div className='w-20 h-20 bg-[var(--deframe-widget-color-bg-tertiary)] rounded-[var(--deframe-widget-size-radius-full)] flex justify-center items-center'>\n <MdOutlineSearchOff className='w-10 h-10 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n <TextHeading variant='h3'>{title}</TextHeading>\n </div>\n <div className='self-stretch text-center'>\n <TextBody variant='text-small'>{description}</TextBody>\n </div>\n </div>\n </div>\n )\n}\n","import { TextBody } from '../texts'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport React from 'react'\n\nexport interface CollapsibleSectionProps {\n /** Section title */\n title: string;\n /** Optional subtitle shown next to title */\n subtitle?: string;\n /** Content to show when expanded */\n children: React.ReactNode;\n /** Whether section is open by default (uncontrolled mode) */\n defaultOpen?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Optional className */\n className?: string;\n /** Aria label text for \"Collapse\" */\n collapseText: string;\n /** Aria label text for \"Expand\" */\n expandText: string;\n}\n\nexport const CollapsibleSection: React.FC<CollapsibleSectionProps> = ({\n title,\n subtitle,\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className = '',\n collapseText,\n expandText,\n}) => {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen)\n\n // Use controlled state if provided, otherwise use internal state\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen\n\n const handleToggle = () => {\n const newOpenState = !isOpen\n if (controlledOpen === undefined) {\n setInternalOpen(newOpenState)\n }\n onOpenChange?.(newOpenState)\n }\n\n return (\n <div className={`flex flex-col gap-[var(--deframe-widget-size-gap-sm)] w-full ${className}`}>\n <button\n type='button'\n onClick={handleToggle}\n className='flex items-center justify-between w-full text-left cursor-pointer'\n aria-expanded={isOpen}\n aria-label={`${isOpen ? collapseText : expandText} ${title}`}\n >\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody className='text-[color:var(--deframe-widget-color-text-primary-dark)] [font-weight:var(--deframe-widget-font-weight-medium)]'>{title}</TextBody>\n </div>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n {subtitle && (\n <TextBody variant='text-small'>{subtitle}</TextBody>\n )}\n <motion.svg\n className='w-5 h-5 text-[color:var(--deframe-widget-color-text-secondary)]'\n fill='none'\n stroke='currentColor'\n viewBox='0 0 24 24'\n animate={{ rotate: isOpen ? 180 : 0 }}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n >\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M5 9l7 7 7-7' />\n </motion.svg>\n </div>\n </button>\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n style={{ overflow: 'hidden' }}\n >\n {children}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface TransactionScreenIconProps {\n type: 'processing' | 'success' | 'warning';\n gradient?: string;\n}\n\nexport const TransactionScreenIcon: React.FC<TransactionScreenIconProps> = ({\n type,\n gradient = 'linear-gradient(135deg, var(--deframe-widget-color-state-warning) 0%, color-mix(in srgb, var(--deframe-widget-color-state-warning) 78%, black) 100%)'\n}) => {\n if (type === 'success') {\n return (\n <div className='relative w-20 h-20'>\n <div className='w-full h-full rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-brand-primary)] flex items-center justify-center'>\n <svg className='w-8 h-8 text-[color:var(--deframe-widget-color-text-primary-dark)]' fill='none' viewBox='0 0 24 24' stroke='currentColor' strokeWidth={3}>\n <path strokeLinecap='round' strokeLinejoin='round' d='M5 13l4 4L19 7' />\n </svg>\n </div>\n </div>\n )\n }\n\n if (type === 'warning') {\n return (\n <div className='relative w-[83px] h-[83px]'>\n <div className='w-full h-full rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center' style={{ background: gradient }}>\n <svg className='w-8 h-8 text-[color:var(--deframe-widget-color-bg-primary)]' fill='currentColor' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'>\n <path d='M16 5.33334C15.6444 5.33334 15.3111 5.51112 15.1111 5.8L5.11112 21.8C4.91112 22.0889 4.91112 22.4667 5.11112 22.7556C5.31112 23.0444 5.64445 23.2222 6.00001 23.2222H26C26.3556 23.2222 26.6889 23.0444 26.8889 22.7556C27.0889 22.4667 27.0889 22.0889 26.8889 21.8L16.8889 5.8C16.6889 5.51112 16.3556 5.33334 16 5.33334ZM16 10.6667C16.5333 10.6667 17 11.1333 17 11.6667V16C17 16.5333 16.5333 17 16 17C15.4667 17 15 16.5333 15 16V11.6667C15 11.1333 15.4667 10.6667 16 10.6667ZM16 19.3333C16.7333 19.3333 17.3333 19.9333 17.3333 20.6667C17.3333 21.4 16.7333 22 16 22C15.2667 22 14.6667 21.4 14.6667 20.6667C14.6667 19.9333 15.2667 19.3333 16 19.3333Z' />\n </svg>\n </div>\n </div>\n )\n }\n\n return (\n <div className='relative w-[83px] h-[83px]'>\n <div className='w-full h-full rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center' style={{ background: gradient }}>\n <svg width='11' height='10' viewBox='0 0 11 10' fill='none' xmlns='http://www.w3.org/2000/svg' className='w-8 h-8 text-[color:var(--deframe-widget-color-text-primary-dark)]'>\n <path d='M3.66659 8.33301H7.33325V7.08301C7.33325 6.62468 7.15374 6.23231 6.79471 5.90593C6.43568 5.57954 6.00409 5.41634 5.49992 5.41634C4.99575 5.41634 4.56415 5.57954 4.20513 5.90593C3.8461 6.23231 3.66659 6.62468 3.66659 7.08301V8.33301ZM5.49992 4.58301C6.00409 4.58301 6.43568 4.41981 6.79471 4.09342C7.15374 3.76704 7.33325 3.37467 7.33325 2.91634V1.66634H3.66659V2.91634C3.66659 3.37467 3.8461 3.76704 4.20513 4.09342C4.56415 4.41981 4.99575 4.58301 5.49992 4.58301ZM2.29159 9.16634C2.16172 9.16634 2.05287 9.12641 1.96502 9.04655C1.87718 8.96669 1.83325 8.86773 1.83325 8.74968C1.83325 8.63162 1.87718 8.53266 1.96502 8.4528C2.05287 8.37294 2.16172 8.33301 2.29159 8.33301H2.74992V7.08301C2.74992 6.6594 2.85877 6.26183 3.07648 5.8903C3.29419 5.51877 3.59784 5.2219 3.98742 4.99967C3.59784 4.77745 3.29419 4.48058 3.07648 4.10905C2.85877 3.73752 2.74992 3.33995 2.74992 2.91634V1.66634H2.29159C2.16172 1.66634 2.05287 1.62641 1.96502 1.54655C1.87718 1.46669 1.83325 1.36773 1.83325 1.24967C1.83325 1.13162 1.87718 1.03266 1.96502 0.952799C2.05287 0.872938 2.16172 0.833008 2.29159 0.833008H8.70825C8.83811 0.833008 8.94697 0.872938 9.03481 0.952799C9.12266 1.03266 9.16659 1.13162 9.16659 1.24967C9.16659 1.36773 9.12266 1.46669 9.03481 1.54655C8.94697 1.62641 8.83811 1.66634 8.70825 1.66634H8.24992V2.91634C8.24992 3.33995 8.14106 3.73752 7.92336 4.10905C7.70565 4.48058 7.402 4.77745 7.01242 4.99967C7.402 5.2219 7.70565 5.51877 7.92336 5.8903C8.14106 6.26183 8.24992 6.6594 8.24992 7.08301V8.33301H8.70825C8.83811 8.33301 8.94697 8.37294 9.03481 8.4528C9.12266 8.53266 9.16659 8.63162 9.16659 8.74968C9.16659 8.86773 9.12266 8.96669 9.03481 9.04655C8.94697 9.12641 8.83811 9.16634 8.70825 9.16634H2.29159Z' fill='currentColor' />\n </svg>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { BackgroundContainer } from '../layout'\nimport { DetailsHeader } from '../details-header'\nimport { CloseButton } from '../buttons'\nimport { ProgressIndicator } from '../progress'\nimport { TextHeading } from '../texts'\nimport { TransactionScreenIcon } from '../transaction-screen-icon/TransactionScreenIcon'\nimport type { TransactionScreenIconProps } from '../transaction-screen-icon/TransactionScreenIcon'\n\nexport interface TransactionScreenProps {\n progress: number;\n iconType: TransactionScreenIconProps['type'];\n iconGradient?: string;\n title: React.ReactNode;\n description: React.ReactNode;\n /** Renders a close (X) button in the top-left */\n onClose?: () => void;\n /** Renders a back-arrow header */\n onBack?: () => void;\n backTitle?: string;\n /** Bottom action bar (buttons) */\n actions?: React.ReactNode;\n /** Card / details content between hero and actions */\n children?: React.ReactNode;\n /** data-testid placed on the header wrapper div when onClose is used */\n testId?: string;\n}\n\nexport const TransactionScreen: React.FC<TransactionScreenProps> = ({\n progress,\n iconType,\n iconGradient,\n title,\n description,\n onClose,\n onBack,\n backTitle = '',\n actions,\n children,\n testId,\n}) => {\n return (\n <BackgroundContainer>\n <div className='flex flex-col h-full'>\n {onBack && <DetailsHeader title={backTitle} onBack={onBack} />}\n {onClose && (\n <div data-testid={testId} className='flex justify-start px-[var(--deframe-widget-size-padding-x-md)] pt-md'>\n <CloseButton onClick={onClose} />\n </div>\n )}\n\n <div className='w-full px-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)]'>\n <ProgressIndicator progress={progress} />\n </div>\n\n <div className='flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)] flex flex-col gap-[var(--deframe-widget-size-gap-lg)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-md)] pt-lg'>\n <TransactionScreenIcon type={iconType} gradient={iconGradient} />\n <TextHeading variant='h-large'>{title}</TextHeading>\n <div className='[font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)] text-center' style={{ maxWidth: '350px' }}>\n {description}\n </div>\n </div>\n\n {children}\n\n <div className='flex-1' />\n </div>\n\n {actions && (\n <div className='px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-md)]'>\n {actions}\n </div>\n )}\n </div>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { TextBody } from '../texts'\n\nexport interface TransactionScreenInvestmentCardProps {\n strategyName: React.ReactNode;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt?: string;\n amountUSD: React.ReactNode;\n amountToken: React.ReactNode;\n}\n\nexport const TransactionScreenInvestmentCard: React.FC<TransactionScreenInvestmentCardProps> = ({\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n}) => {\n const [hasImageError, setHasImageError] = React.useState(false)\n\n React.useEffect(() => {\n setHasImageError(false)\n }, [iconSrc])\n\n const shouldShowImage = Boolean(iconSrc) && !hasImageError\n const fallbackLabel = (iconAlt || '?').slice(0, 1).toUpperCase()\n\n return (\n <SectionCard className='!p-[22px]'>\n <div className='flex items-center justify-between'>\n <div className='flex flex-col items-start gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-lg)] [line-height:var(--deframe-widget-font-leading-lg)] [font-weight:var(--deframe-widget-font-weight-medium)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {strategyName}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {apyLabel} <TextBody as='span' className='text-[color:var(--deframe-widget-color-state-success)]'>{apyValue}</TextBody>\n </div>\n </div>\n <div className='flex items-start gap-[var(--deframe-widget-size-gap-sm)]'>\n <div className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex items-center justify-center'>\n {shouldShowImage\n ? <img src={iconSrc} alt={iconAlt} className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)]' onError={() => setHasImageError(true)} />\n : <span className='[font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-secondary)]'>{fallbackLabel}</span>}\n </div>\n <div className='flex flex-col items-end'>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {amountUSD}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {amountToken}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n )\n}\n","import React from 'react'\n\nexport interface TokenWithChainBadgeProps {\n tokenLogoUrl?: string;\n tokenAlt?: string;\n chainId?: number;\n chainLogoUrl?: string;\n chainName?: string;\n}\n\nexport const TokenWithChainBadge: React.FC<TokenWithChainBadgeProps> = ({\n tokenLogoUrl,\n tokenAlt,\n chainLogoUrl,\n chainName,\n}) => {\n const fallbackText = encodeURIComponent((tokenAlt || 'TOK').slice(0, 3).toUpperCase())\n const fallbackSrc = `https://placehold.co/40x40?text=${fallbackText}`\n\n return (\n <div className='relative w-10 h-10'>\n <img\n src={tokenLogoUrl || fallbackSrc}\n alt={tokenAlt || ''}\n className='object-cover w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)]'\n onError={(e) => {\n (e.target as HTMLImageElement).src = fallbackSrc\n }}\n />\n {chainLogoUrl && (\n <img\n src={chainLogoUrl}\n alt={chainName}\n className='absolute object-cover w-6 h-6 p-px bg-[var(--deframe-widget-color-bg-primary-dark)] border rounded-[var(--deframe-widget-size-radius-full)] -bottom-1 -right-1 border-bg-default'\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none'\n }}\n />\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { TransactionScreen } from '../transaction-screen'\nimport { MdOutlineSwapHoriz } from 'react-icons/md'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\n\nexport interface SwapProcessingViewProps {\n fromTokenSymbol: string;\n fromTokenIcon: string;\n toTokenSymbol: string;\n toTokenIcon: string;\n formattedInputAmount: string;\n formattedOutputAmount: string;\n formattedInputAmountUSD: string;\n formattedOutputAmountUSD: string;\n progress: number;\n transactionSteps: TransactionStep[];\n onClose: () => void;\n onGoToHistory: () => void;\n titleText: string;\n descriptionPrefix: string;\n activityHistoryText: string;\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const SwapProcessingView: React.FC<SwapProcessingViewProps> = ({\n fromTokenSymbol,\n fromTokenIcon,\n toTokenSymbol,\n toTokenIcon,\n formattedInputAmount,\n formattedOutputAmount,\n formattedInputAmountUSD,\n formattedOutputAmountUSD,\n progress,\n transactionSteps,\n onClose,\n onGoToHistory,\n titleText,\n descriptionPrefix,\n activityHistoryText,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n testId='swap-processing-screen'\n onClose={onClose}\n progress={progress}\n iconType='processing'\n title={<span data-testid='swap-processing-title'>{titleText}</span>}\n description={\n <>\n {descriptionPrefix}{' '}\n <span\n className='[font-weight:var(--deframe-widget-font-weight-semibold)] underline underline-offset-2 cursor-pointer text-[color:var(--deframe-widget-color-brand-primary)]'\n onClick={onGoToHistory}\n >\n {activityHistoryText}.\n </span>\n </>\n }\n >\n <SectionCard className='!p-[22px]'>\n <div className='flex items-center justify-between w-full relative px-[var(--deframe-widget-size-padding-x-md)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-[var(--deframe-widget-color-brand-secondary)] rounded-[var(--deframe-widget-size-radius-full)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)] z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","/** Shared min-height across all Simple swap views */\nexport const SWAP_SIMPLE_MIN_HEIGHT = 520\n\n/** Shared fixed width across all Simple swap views */\nexport const SWAP_SIMPLE_WIDTH = 480\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { SWAP_SIMPLE_MIN_HEIGHT } from './constants'\n\n/**\n * Static skeleton simulating the SwapFormViewSimple layout.\n * Used behind glass-blur overlays in processing/success/failed/warning views.\n * Renders fake token cards with circles, text blocks, amounts, and a submit button.\n */\nexport function SwapFormSkeleton () {\n return (\n <div\n data-test-id='swap-form-skeleton'\n className={twMerge(\n 'relative',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n 'flex flex-col items-stretch gap-[var(--deframe-widget-size-gap-sm)]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n style={{ minHeight: SWAP_SIMPLE_MIN_HEIGHT }}\n >\n {/* ── History button (top-right) ── */}\n <div data-test-id='swap-form-skeleton-history' className='flex justify-end'>\n <div className='w-9 h-9 rounded-[var(--deframe-widget-size-radius-full)] border border-[color:var(--deframe-widget-color-border-secondary)]' />\n </div>\n\n {/* ── From card ── */}\n <SkeletonCard\n testId='swap-form-skeleton-from'\n symbol='USDC'\n network='ARBITRUM'\n amount='500'\n usd='≈ $499.87'\n balance='Saldo: 1 250.00 USDC'\n />\n\n {/* ── Swap direction button (centered, overlaps) ── */}\n <div data-test-id='swap-form-skeleton-swap-btn-wrapper' className='flex justify-center -my-[16px] relative z-[1]'>\n <div className={twMerge(\n 'w-10 h-10',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'flex items-center justify-center',\n 'text-[color:var(--deframe-widget-color-brand-primary)]'\n )}\n >\n <svg width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='currentColor' strokeWidth='2.5' strokeLinecap='round' strokeLinejoin='round' aria-hidden='true'>\n <line x1='12' y1='5' x2='12' y2='19' />\n <polyline points='19 12 12 19 5 12' />\n </svg>\n </div>\n </div>\n\n {/* ── To card ── */}\n <SkeletonCard\n testId='swap-form-skeleton-to'\n symbol='ETH'\n network='ETHEREUM'\n amount='0.2061'\n usd='≈ $499.00'\n balance='Saldo: 41 ETH'\n />\n\n {/* ── Spacer ── */}\n <div className='flex-1' />\n\n {/* ── Submit button ── */}\n <div\n data-test-id='swap-form-skeleton-submit'\n className={twMerge(\n 'h-12',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[var(--deframe-widget-color-brand-primary)]',\n 'flex items-center justify-center',\n 'text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'text-[color:var(--deframe-widget-color-text-primary-dark)]'\n )}\n >\n Revisar Troca\n </div>\n </div>\n )\n}\n\n// ── SkeletonCard ────────────────────────────────────────────────────────────\n\ninterface SkeletonCardProps {\n testId: string\n symbol: string\n network: string\n amount: string\n usd: string\n balance: string\n}\n\nfunction SkeletonCard ({ testId, symbol, network, amount, usd, balance }: SkeletonCardProps) {\n const initials = symbol.slice(0, 2).toUpperCase()\n\n return (\n <div\n data-test-id={testId}\n className={twMerge(\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'\n )}\n >\n {/* Top row: token selector | divider | amount */}\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n {/* Token selector area */}\n <div className='inline-flex items-center gap-[10px] flex-shrink-0'>\n {/* Token icon with badge */}\n <div className='relative flex-shrink-0' style={{ width: 38, height: 38 }}>\n <div\n className='w-[38px] h-[38px] rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-brand-primary)] flex items-center justify-center text-[13px] [font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary-dark)]'\n >\n {initials}\n </div>\n <div className='absolute -bottom-0.5 -right-0.5 w-4 h-4 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] shadow-[0_0_0_2px_var(--deframe-widget-color-bg-secondary)] flex items-center justify-center text-[7px] [font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary-dark)]'>\n {network.slice(0, 2)}\n </div>\n </div>\n {/* Symbol + network */}\n <div className='flex flex-col items-start'>\n <span className='text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] leading-[1.2] text-[color:var(--deframe-widget-color-text-primary)]'>\n {symbol}\n </span>\n <span className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-tertiary)] uppercase tracking-[0.04em] leading-[1.2]'>\n {network}\n </span>\n </div>\n </div>\n\n {/* Divider */}\n <div className='w-px h-10 bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0' />\n\n {/* Amount + USD */}\n <div className='flex flex-col items-end flex-1 min-w-0'>\n <span className='text-[36px] [font-weight:var(--deframe-widget-font-weight-semibold)] [line-height:1.1] text-[color:var(--deframe-widget-color-text-primary)] text-right w-full'>\n {amount}\n </span>\n <span className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {usd}\n </span>\n </div>\n </div>\n\n {/* Balance row */}\n <div className='mt-[var(--deframe-widget-size-gap-sm)]'>\n <span className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {balance}\n </span>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport { SwapFormSkeleton } from '../swap-form-view/SwapFormSkeleton'\nimport { SWAP_SIMPLE_MIN_HEIGHT, SWAP_SIMPLE_WIDTH } from '../swap-form-view/constants'\n\n// ── Loading icon — rotating two-arrow sync, identical to SwapFeedbackOverlay ─\n\nfunction LoadingIcon () {\n const green = 'var(--deframe-widget-color-brand-primary)'\n const trackColor = 'color-mix(in srgb, var(--deframe-widget-color-brand-primary) 12%, transparent)'\n const sw = 2.8\n const aw = 2.4\n\n return (\n <motion.svg\n data-test-id='swap-processing-simple-loading-icon'\n width='56'\n height='56'\n viewBox='0 0 56 56'\n fill='none'\n aria-hidden='true'\n animate={{ rotate: 360 }}\n transition={{ duration: 1.6, repeat: Infinity, ease: 'linear' }}\n >\n <circle cx='28' cy='28' r='22' stroke={trackColor} strokeWidth={sw} />\n\n <path\n d='M 6.75 22.31 A 22 22 0 0 1 49.25 22.31'\n stroke={green}\n strokeWidth={sw}\n strokeLinecap='round'\n />\n <path\n d='M 45.0 18.1 L 49.25 22.31 L 51.0 16.5'\n stroke={green}\n strokeWidth={aw}\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n\n <path\n d='M 49.25 33.69 A 22 22 0 0 1 6.75 33.69'\n stroke={green}\n strokeWidth={sw}\n strokeLinecap='round'\n />\n <path\n d='M 11.0 37.9 L 6.75 33.69 L 5.0 39.5'\n stroke={green}\n strokeWidth={aw}\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </motion.svg>\n )\n}\n\n// ── SwapProcessingViewSimple ──────────────────────────────────────────────────\n\nexport const SwapProcessingViewSimple: React.FC = () => {\n return (\n <div\n data-test-id='swap-processing-simple-wrapper'\n className={twMerge(\n 'relative overflow-hidden',\n `w-[${SWAP_SIMPLE_WIDTH}px] max-w-[calc(100%-32px)] box-border`,\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n style={{ minHeight: SWAP_SIMPLE_MIN_HEIGHT }}\n >\n <div data-test-id='swap-processing-simple-skeleton'>\n <SwapFormSkeleton />\n </div>\n\n <div\n data-test-id='swap-processing-simple-screen'\n className={twMerge(\n 'absolute inset-0 z-10',\n 'flex flex-col items-center justify-center',\n 'gap-[var(--deframe-widget-size-gap-lg)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]',\n 'rounded-[inherit]',\n 'backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]',\n 'bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]'\n )}\n >\n <LoadingIcon />\n\n <div\n data-test-id='swap-processing-simple-copy'\n className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center'\n >\n <span\n data-test-id='swap-processing-simple-title'\n className={twMerge(\n '[font-size:12px] [line-height:1.25] [letter-spacing:0.10em] uppercase',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-brand-primary)]'\n )}\n >\n PROCESSANDO TRANSAÇÃO...\n </span>\n\n <span\n data-test-id='swap-processing-simple-subtitle'\n className={twMerge(\n '[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'max-w-[260px]'\n )}\n >\n Aguarde enquanto sua troca é confirmada.\n </span>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { TransactionScreen } from '../transaction-screen'\nimport { MdOutlineSwapHoriz } from 'react-icons/md'\nimport { TokenWithChainBadge } from '../token-with-chain-badge'\nimport { SectionCard } from '../layout'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface SwapCrossChainProcessingViewProps {\n fromTokenSymbol: string;\n fromTokenIcon: string;\n toTokenSymbol: string;\n toTokenIcon: string;\n originChainId?: number;\n destinationChainId?: number;\n originChainLogoUrl: string;\n originChainName: string;\n destinationChainLogoUrl: string;\n destinationChainName: string;\n formattedInputAmount: string;\n formattedOutputAmount: string;\n formattedInputAmountUSD: string;\n formattedOutputAmountUSD: string;\n progress: number;\n title: string;\n description: string;\n transactionSteps: TransactionStep[];\n onClose: () => void;\n onGoToHistory: () => void;\n viewHistoryText: string;\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const SwapCrossChainProcessingView: React.FC<SwapCrossChainProcessingViewProps> = ({\n fromTokenSymbol,\n fromTokenIcon,\n toTokenSymbol,\n toTokenIcon,\n originChainId,\n destinationChainId,\n originChainLogoUrl,\n originChainName,\n destinationChainLogoUrl,\n destinationChainName,\n formattedInputAmount,\n formattedOutputAmount,\n formattedInputAmountUSD,\n formattedOutputAmountUSD,\n progress,\n title,\n description,\n transactionSteps,\n onClose,\n onGoToHistory,\n viewHistoryText,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n onClose={onClose}\n progress={progress}\n iconType='processing'\n title={title}\n description={\n <>\n {description}{' '}\n <span\n className='[font-weight:var(--deframe-widget-font-weight-semibold)] underline cursor-pointer underline-offset-2 text-[color:var(--deframe-widget-color-brand-primary)]'\n onClick={onGoToHistory}\n >\n {viewHistoryText}\n </span>\n .\n </>\n }\n >\n <SectionCard className='!p-[22px]'>\n <div className='relative flex items-center justify-between w-full px-[var(--deframe-widget-size-padding-x-md)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <TokenWithChainBadge\n tokenLogoUrl={fromTokenIcon}\n tokenAlt={fromTokenSymbol}\n chainId={originChainId}\n chainLogoUrl={originChainLogoUrl}\n chainName={originChainName}\n />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute z-10 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] -translate-x-1/2 -translate-y-1/2 rounded-[var(--deframe-widget-size-radius-full)] shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)] left-1/2 top-1/2 bg-[var(--deframe-widget-color-brand-secondary)]'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <TokenWithChainBadge\n tokenLogoUrl={toTokenIcon}\n tokenAlt={toTokenSymbol}\n chainId={destinationChainId}\n chainLogoUrl={destinationChainLogoUrl}\n chainName={destinationChainName}\n />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { TransactionScreen, TransactionScreenInvestmentCard } from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface InvestmentCrossChainProcessingViewProps {\n title: string;\n description: React.ReactNode;\n progress: number;\n strategyName: string;\n strategyIcon?: string;\n strategySymbol: string;\n apyLabel: string;\n apyValue: string;\n amountUSD: string;\n amountToken: string;\n onClose: () => void;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const InvestmentCrossChainProcessingView: React.FC<InvestmentCrossChainProcessingViewProps> = ({\n title,\n description,\n progress,\n strategyName,\n strategyIcon,\n strategySymbol,\n apyLabel,\n apyValue,\n amountUSD,\n amountToken,\n onClose,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='processing'\n title={title}\n description={description}\n onClose={onClose}\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={strategyIcon}\n iconAlt={strategySymbol}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport { SectionCard } from '../layout'\nimport { TransactionScreen } from '../transaction-screen'\nimport { MdOutlineSwapHoriz } from 'react-icons/md'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface SwapSignatureWarningViewProps {\n fromTokenSymbol: string;\n fromTokenIcon: string;\n toTokenSymbol: string;\n toTokenIcon: string;\n formattedInputAmount: string;\n formattedOutputAmount: string;\n formattedInputAmountUSD: string;\n formattedOutputAmountUSD: string;\n progress: number;\n errorTitle: string;\n errorDescription: string;\n transactionSteps: TransactionStep[];\n onCancel: () => void;\n onTryAgain: () => void;\n cancelButtonText: string;\n retryButtonText: string;\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const SwapSignatureWarningView: React.FC<SwapSignatureWarningViewProps> = ({\n fromTokenSymbol,\n fromTokenIcon,\n toTokenSymbol,\n toTokenIcon,\n formattedInputAmount,\n formattedOutputAmount,\n formattedInputAmountUSD,\n formattedOutputAmountUSD,\n progress,\n errorTitle,\n errorDescription,\n transactionSteps,\n onCancel,\n onTryAgain,\n cancelButtonText,\n retryButtonText,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n testId='swap-signature-warning-screen'\n onClose={onCancel}\n progress={progress}\n iconType='warning'\n title={<span data-testid='swap-signature-warning-title'>{errorTitle}</span>}\n description={errorDescription}\n actions={\n <div data-testid='swap-signature-warning-actions' className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton data-testid='swap-signature-warning-cancel' className='flex-1' onClick={onCancel}>\n {cancelButtonText}\n </SecondaryButton>\n <PrimaryButton data-testid='swap-signature-warning-retry' className='flex-1' onClick={onTryAgain}>\n {retryButtonText}\n </PrimaryButton>\n </div>\n }\n >\n <SectionCard className='!p-[22px]'>\n <div className='flex items-center justify-between w-full relative px-[var(--deframe-widget-size-padding-x-md)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-[var(--deframe-widget-color-brand-secondary)] rounded-[var(--deframe-widget-size-radius-full)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)] z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React, { useEffect } from 'react'\nimport { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport type { SwapSignatureWarningViewProps } from './SwapSignatureWarningView'\nimport { SwapFormSkeleton } from '../swap-form-view/SwapFormSkeleton'\nimport { SWAP_SIMPLE_MIN_HEIGHT, SWAP_SIMPLE_WIDTH } from '../swap-form-view/constants'\n\nexport type { SwapSignatureWarningViewProps }\n\n// -- Warning icon -- spring-in orange/amber circle + animated exclamation mark -\n\nfunction WarningIcon () {\n return (\n <motion.div\n data-test-id='swap-signature-warning-simple-icon'\n initial={{ scale: 0.55, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 20, delay: 0.05 }}\n className={twMerge(\n 'w-[84px] h-[84px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0',\n 'flex items-center justify-center',\n 'bg-[var(--deframe-widget-color-state-warning)]',\n 'shadow-[0_0_0_10px_color-mix(in_srgb,var(--deframe-widget-color-state-warning)_12%,transparent),0_0_32px_color-mix(in_srgb,var(--deframe-widget-color-state-warning)_22%,transparent)]'\n )}\n >\n <svg width='44' height='44' viewBox='0 0 44 44' fill='none' aria-hidden='true'>\n {/* Exclamation mark stem */}\n <motion.line\n x1='22' y1='10' x2='22' y2='26'\n stroke='white'\n strokeWidth='3.5'\n strokeLinecap='round'\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.3, delay: 0.2, ease: 'easeOut' }}\n />\n {/* Exclamation mark dot */}\n <motion.circle\n cx='22' cy='33'\n r='2'\n fill='white'\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ duration: 0.15, delay: 0.45, ease: 'easeOut' }}\n />\n </svg>\n </motion.div>\n )\n}\n\n// -- SwapSignatureWarningViewSimple ------------------------------------------------\n\n/**\n * Visual \"Simple\" variant of SwapSignatureWarningView.\n * Renders the SwapFormSkeleton behind a glass-blur overlay with a\n * spring-in warning icon, title, description and cancel / retry buttons.\n */\nexport const SwapSignatureWarningViewSimple: React.FC<Partial<SwapSignatureWarningViewProps>> = ({\n errorTitle,\n errorDescription,\n onCancel,\n}) => {\n useEffect(() => {\n const timer = setTimeout(() => {\n onCancel?.()\n }, 3000)\n return () => clearTimeout(timer)\n }, [onCancel])\n return (\n <div\n data-test-id='swap-signature-warning-simple-wrapper'\n className={twMerge(\n 'relative overflow-hidden',\n `min-h-[${SWAP_SIMPLE_MIN_HEIGHT}px]`,\n `w-[${SWAP_SIMPLE_WIDTH}px] max-w-[calc(100%-32px)] box-border`,\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n >\n {/* Skeleton background */}\n <div data-test-id='swap-signature-warning-simple-skeleton'>\n <SwapFormSkeleton />\n </div>\n\n {/* Glass-blur overlay */}\n <div\n data-test-id='swap-signature-warning-simple-screen'\n className={twMerge(\n 'absolute inset-0 z-10',\n 'flex flex-col items-center justify-center',\n 'gap-[var(--deframe-widget-size-gap-lg)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]',\n 'rounded-[inherit]',\n 'backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]',\n 'bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]'\n )}\n >\n <WarningIcon />\n\n {/* Copy block */}\n <div\n data-test-id='swap-signature-warning-simple-copy'\n className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center'\n >\n <span\n data-test-id='swap-signature-warning-simple-title'\n className={twMerge(\n '[font-size:22px] [line-height:1.25]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n >\n {errorTitle}\n </span>\n\n <span\n data-test-id='swap-signature-warning-simple-subtitle'\n className={twMerge(\n '[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'max-w-[260px]'\n )}\n >\n {errorDescription}\n </span>\n </div>\n\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { PrimaryButton } from '../buttons'\nimport { SectionCard } from '../layout'\nimport { TransactionScreen } from '../transaction-screen'\nimport { MdOutlineSwapHoriz } from 'react-icons/md'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { SwapSuccessLabels } from '../../types/swap-success-labels'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\n\nexport interface SwapSuccessViewProps {\n fromTokenSymbol: string;\n fromTokenIcon: string;\n toTokenSymbol: string;\n toTokenIcon: string;\n formattedInputAmount: string;\n formattedOutputAmount: string;\n formattedInputAmountUSD: string;\n formattedOutputAmountUSD: string;\n transactionSteps: TransactionStep[];\n onClose: () => void;\n onStartNewSwap: () => void;\n onGoToWallet: () => void;\n labels: SwapSuccessLabels;\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const SwapSuccessView: React.FC<SwapSuccessViewProps> = ({\n fromTokenSymbol,\n fromTokenIcon,\n toTokenSymbol,\n toTokenIcon,\n formattedInputAmount,\n formattedOutputAmount,\n formattedInputAmountUSD,\n formattedOutputAmountUSD,\n transactionSteps,\n onClose,\n onStartNewSwap,\n onGoToWallet,\n labels,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n testId='swap-success-screen'\n onClose={onClose}\n progress={100}\n iconType='success'\n title={<span data-testid='swap-success-title'>{labels.title}</span>}\n description={\n <>\n {labels.descriptionPrefix} <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)]'>{formattedInputAmount} {fromTokenSymbol}</strong> {labels.descriptionMiddle}{' '}\n <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)]'>{formattedOutputAmount} {toTokenSymbol}</strong>\n <br />\n {labels.descriptionSuffix}{' '}\n <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-brand-primary)] cursor-pointer' onClick={onGoToWallet}>\n {labels.walletLinkText}\n </strong>\n </>\n }\n actions={\n <div data-testid='swap-start-new-wrapper' className='w-full'>\n <PrimaryButton data-testid='swap-start-new-button' className='w-full' onClick={onStartNewSwap}>\n {labels.startNewSwapButton}\n </PrimaryButton>\n </div>\n }\n >\n <SectionCard className='!p-[22px]'>\n <div className='flex items-center justify-between w-full relative px-[var(--deframe-widget-size-padding-x-md)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-[var(--deframe-widget-color-brand-secondary)] rounded-[var(--deframe-widget-size-radius-full)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)] z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport { SwapFormSkeleton } from '../swap-form-view/SwapFormSkeleton'\nimport { SWAP_SIMPLE_MIN_HEIGHT, SWAP_SIMPLE_WIDTH } from '../swap-form-view/constants'\n\n// ── Animated success icon ─────────────────\n\nfunction SuccessIcon () {\n return (\n <motion.div\n data-test-id='swap-success-simple-icon'\n initial={{ scale: 0.55, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 20, delay: 0.05 }}\n className={twMerge(\n 'w-[84px] h-[84px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0',\n 'flex items-center justify-center',\n 'bg-[var(--deframe-widget-color-state-success)]',\n 'shadow-[0_0_0_10px_color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent),0_0_32px_color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_22%,transparent)]'\n )}\n >\n <svg width='44' height='44' viewBox='0 0 44 44' fill='none' aria-hidden='true'>\n <motion.path\n d='M10 22 L18 30 L34 14'\n stroke='white'\n strokeWidth='3.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.45, delay: 0.2, ease: 'easeOut' }}\n />\n </svg>\n </motion.div>\n )\n}\n\n// ── SwapSuccessViewSimple ─────────────────────────────────────────────────────\n\nexport const SwapSuccessViewSimple: React.FC = () => {\n return (\n <div\n data-test-id='swap-success-simple-wrapper'\n className={twMerge(\n 'relative overflow-hidden',\n `min-h-[${SWAP_SIMPLE_MIN_HEIGHT}px]`,\n `w-[${SWAP_SIMPLE_WIDTH}px] max-w-[calc(100%-32px)] box-border`,\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n >\n <div data-test-id='swap-success-simple-skeleton'>\n <SwapFormSkeleton />\n </div>\n\n <div\n data-test-id='swap-success-simple-screen'\n className={twMerge(\n 'absolute inset-0 z-10',\n 'flex flex-col items-center justify-center',\n 'gap-[var(--deframe-widget-size-gap-lg)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]',\n 'rounded-[inherit]',\n 'backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]',\n 'bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]'\n )}\n >\n <SuccessIcon />\n\n <div\n data-test-id='swap-success-simple-copy'\n className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center'\n >\n <span\n data-test-id='swap-success-simple-title'\n className={twMerge(\n '[font-size:var(--deframe-widget-font-size-xl)]',\n '[line-height:var(--deframe-widget-font-leading-xl)]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n >\n Troca Aprovada!\n </span>\n\n <span\n data-test-id='swap-success-simple-subtitle'\n className={twMerge(\n '[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'max-w-[260px]'\n )}\n >\n Seu saldo foi atualizado.\n </span>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport { SectionCard } from '../layout'\nimport { TransactionScreen } from '../transaction-screen'\nimport { MdOutlineSwapHoriz } from 'react-icons/md'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\n\nexport interface SwapTransactionFailedViewProps {\n fromTokenSymbol: string;\n fromTokenIcon: string;\n toTokenSymbol: string;\n toTokenIcon: string;\n formattedInputAmount: string;\n formattedOutputAmount: string;\n formattedInputAmountUSD: string;\n formattedOutputAmountUSD: string;\n progress: number;\n errorTitle: string;\n errorDescription: string;\n transactionSteps: TransactionStep[];\n hasExplorerLink: boolean;\n onBack: () => void;\n onViewExplorer: () => void;\n onTryAgain: () => void;\n viewOnExplorerText: string;\n retryButtonText: string;\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const SwapTransactionFailedView: React.FC<SwapTransactionFailedViewProps> = ({\n fromTokenSymbol,\n fromTokenIcon,\n toTokenSymbol,\n toTokenIcon,\n formattedInputAmount,\n formattedOutputAmount,\n formattedInputAmountUSD,\n formattedOutputAmountUSD,\n progress,\n errorTitle,\n errorDescription,\n transactionSteps,\n hasExplorerLink,\n onBack,\n onViewExplorer,\n onTryAgain,\n viewOnExplorerText,\n retryButtonText,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n testId='swap-failed-screen'\n onClose={onBack}\n progress={progress}\n iconType='warning'\n iconGradient='linear-gradient(135deg, var(--deframe-widget-color-state-error) 0%, color-mix(in srgb, var(--deframe-widget-color-state-error) 78%, black) 100%)'\n title={<span data-testid='swap-failed-title'>{errorTitle}</span>}\n description={errorDescription}\n actions={\n <div data-testid='swap-failed-actions' className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton data-testid='swap-failed-view-explorer' className='flex-1' onClick={onViewExplorer} disabled={!hasExplorerLink}>\n {viewOnExplorerText}\n </SecondaryButton>\n <PrimaryButton data-testid='swap-failed-retry' className='flex-1' onClick={onTryAgain}>\n {retryButtonText}\n </PrimaryButton>\n </div>\n }\n >\n <SectionCard className='!p-[22px]'>\n <div className='flex items-center justify-between w-full relative px-[var(--deframe-widget-size-padding-x-md)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-[var(--deframe-widget-color-brand-secondary)] rounded-[var(--deframe-widget-size-radius-full)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)] z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport type { SwapTransactionFailedViewProps } from './SwapTransactionFailedView'\nimport { SwapFormSkeleton } from '../swap-form-view/SwapFormSkeleton'\nimport { SWAP_SIMPLE_MIN_HEIGHT, SWAP_SIMPLE_WIDTH } from '../swap-form-view/constants'\n\nexport type { SwapTransactionFailedViewProps }\n\n// ── Error icon — spring-in red circle + animated X, identical to SwapFeedbackOverlay ─\n\nfunction ErrorIcon () {\n return (\n <motion.div\n data-test-id='swap-failed-simple-icon'\n initial={{ scale: 0.55, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 20, delay: 0.05 }}\n className={twMerge(\n 'w-[84px] h-[84px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0',\n 'flex items-center justify-center',\n 'bg-[var(--deframe-widget-color-state-error)]',\n 'shadow-[0_0_0_10px_color-mix(in_srgb,var(--deframe-widget-color-state-error)_12%,transparent),0_0_32px_color-mix(in_srgb,var(--deframe-widget-color-state-error)_22%,transparent)]'\n )}\n >\n <svg width='44' height='44' viewBox='0 0 44 44' fill='none' aria-hidden='true'>\n <motion.line\n x1='14' y1='14' x2='30' y2='30'\n stroke='white'\n strokeWidth='3.5'\n strokeLinecap='round'\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.25, delay: 0.2, ease: 'easeOut' }}\n />\n <motion.line\n x1='30' y1='14' x2='14' y2='30'\n stroke='white'\n strokeWidth='3.5'\n strokeLinecap='round'\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.25, delay: 0.38, ease: 'easeOut' }}\n />\n </svg>\n </motion.div>\n )\n}\n\n// ── SwapTransactionFailedViewSimple ───────────────────────────────────────────\n\n/**\n * Visual variant of SwapTransactionFailedView.\n * Design identical to the SwapPanel ErrorOverlay:\n * glass-blur transparent background, spring-in red circle with animated X,\n * bold title + muted subtitle. No chrome, no transaction details.\n */\nexport const SwapTransactionFailedViewSimple: React.FC<Partial<SwapTransactionFailedViewProps>> = ({\n errorTitle,\n errorDescription,\n}) => {\n return (\n <div\n data-test-id='swap-failed-simple-wrapper'\n className={twMerge(\n 'relative overflow-hidden',\n `min-h-[${SWAP_SIMPLE_MIN_HEIGHT}px]`,\n `w-[${SWAP_SIMPLE_WIDTH}px] max-w-[calc(100%-32px)] box-border`,\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n >\n <div data-test-id='swap-failed-simple-skeleton'>\n <SwapFormSkeleton />\n </div>\n\n <div\n data-test-id='swap-failed-simple-screen'\n className={twMerge(\n 'absolute inset-0 z-10',\n 'flex flex-col items-center justify-center',\n 'gap-[var(--deframe-widget-size-gap-lg)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]',\n 'rounded-[inherit]',\n 'backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]',\n 'bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]'\n )}\n >\n <ErrorIcon />\n\n <div\n data-test-id='swap-failed-simple-copy'\n className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center'\n >\n <span\n data-test-id='swap-failed-simple-title'\n className={twMerge(\n '[font-size:22px] [line-height:1.25]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n >\n Troca Falhou\n </span>\n\n <span\n data-test-id='swap-failed-simple-subtitle'\n className={twMerge(\n '[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'max-w-[260px]'\n )}\n >\n Tente novamente mais tarde.\n </span>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { ActionSheet } from '../action-sheet'\nimport { BackgroundContainer, Navbar } from '../layout'\nimport { CloseButton, TertiaryButton } from '../buttons'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { TextBody, TextHeading } from '../texts'\nimport { SearchInput } from '../search-input'\nimport { SearchEmptyState } from '../search-empty-state'\nimport { LoadingDots } from '../loading-dots'\nimport type { ChooseAnAssetSwapLabels } from '../../types/choose-an-asset-swap-labels'\nimport type { TokenData } from '../../types/token-data'\nimport type { BalanceDomain } from '../../types/balance-domain'\n\nexport type { TokenData, BalanceDomain }\n\nexport interface ChooseAnAssetSwapViewProps {\n actionSheetId: string;\n isOpen: boolean;\n currentActionSheetId: string | null;\n onClose: () => void;\n onSearch: (value: string) => void;\n autoFocus: boolean;\n displayedTokens: TokenData[];\n hasMore: boolean;\n onLoadMore: () => void;\n findBalance: (token: TokenData) => BalanceDomain | undefined;\n isFetching: boolean;\n onAssetClick: (token: TokenData) => void;\n labels: ChooseAnAssetSwapLabels;\n formatTokenAmount: (amountUI: string, priceUSD: number, decimals: number) => string;\n formatCurrencyValue: (value: number) => string;\n}\n\nexport const ChooseAnAssetSwapView: React.FC<ChooseAnAssetSwapViewProps> = ({\n actionSheetId,\n isOpen,\n currentActionSheetId,\n onClose,\n onSearch,\n autoFocus,\n displayedTokens,\n hasMore,\n onLoadMore,\n findBalance,\n isFetching,\n onAssetClick,\n labels,\n formatTokenAmount,\n formatCurrencyValue,\n}) => {\n const [searchValue, setSearchValue] = React.useState('')\n\n const handleSearch = (value: string) => {\n setSearchValue(value)\n onSearch(value)\n }\n\n return (\n <div className='flex justify-center' data-testid={`swap-token-actionsheet-wrapper-${actionSheetId}`}>\n <ActionSheet\n id={actionSheetId}\n currentActionSheetId={currentActionSheetId}\n isOpen={isOpen}\n onClose={onClose}\n position='bottom'\n height='full'\n contentClassName='w-full max-w-[620px] mx-auto'\n >\n <BackgroundContainer className='flex flex-col h-full'>\n <Navbar>\n <CloseButton testId={`swap-token-actionsheet-close-${actionSheetId}`} onClick={onClose} />\n </Navbar>\n <div className='flex flex-col flex-1 w-full px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)] overflow-hidden'>\n <div className='flex-shrink-0'>\n <TextHeading>{labels.title}</TextHeading>\n <br />\n <SearchInput\n onSearch={handleSearch}\n placeholder={labels.searchPlaceholder}\n autoFocus={autoFocus}\n inputClassName='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n containerTestId={`swap-token-search-container-${actionSheetId}`}\n inputTestId={`swap-token-search-input-${actionSheetId}`}\n />\n </div>\n {(searchValue && displayedTokens.length === 0 && !isFetching)\n ? (\n <SearchEmptyState title={labels.searchEmptyTitle} description={labels.searchEmptyDescription} />\n )\n : (\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)] w-full mt-[var(--deframe-widget-size-gap-md)] overflow-y-auto flex-1 min-h-0'>\n {isFetching && (\n <div className='flex justify-center items-center w-full py-[var(--deframe-widget-size-padding-y-md)]'>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {labels.searchingText}\n </TextBody>\n <LoadingDots />\n </div>\n </div>\n )}\n {displayedTokens.map((token, index) => {\n const balance = findBalance(token)\n const tokenPriceUSD = Number(balance?.priceUSD) || 0\n const formattedBalance = balance?.amountUI\n ? formatTokenAmount(balance.amountUI, tokenPriceUSD, 2)\n : '0'\n\n return (\n <ListItem\n className='w-full flex-shrink-0'\n onClick={() => onAssetClick(token)}\n key={`token-${token.address}-${index}`}\n data-testid={`swap-token-item-${token.symbol.toLowerCase()}-${token.chainId}`}\n data-address={token.address}\n data-chain-id={token.chainId}\n data-symbol={token.symbol}\n >\n <ListItemLeftSide>\n <img src={token.logoURI || ''} alt={token.name} className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)]' />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{token.name}</TextBody>\n <TextBody variant='text-small'>{token.symbol}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <TextBody>{formattedBalance}</TextBody>\n <TextBody variant='text-small'>{formatCurrencyValue(Number(balance?.amountInUSD) || 0)}</TextBody>\n </ListItemRightSide>\n </ListItem>\n )\n })}\n {hasMore && (\n <div className='flex justify-center items-center w-full py-[var(--deframe-widget-size-padding-y-md)] flex-shrink-0'>\n <TertiaryButton onClick={onLoadMore}>{labels.loadMoreButton}</TertiaryButton>\n </div>\n )}\n </div>\n )}\n </div>\n </BackgroundContainer>\n </ActionSheet>\n </div>\n )\n}\n","import React from 'react'\nimport { HiChevronDown } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\n\nexport interface SwapTokenSelectorViewProps {\n token: { symbol: string; logoURI?: string } | null;\n onClick: () => void;\n testId?: string;\n selectTokenLabel?: string;\n className?: string;\n}\n\nexport const SwapTokenSelectorView: React.FC<SwapTokenSelectorViewProps> = ({\n token,\n onClick,\n testId = 'swap-token-selector',\n selectTokenLabel = 'Select token',\n className,\n}) => {\n const baseClasses = 'h-[56px] border border-[color:var(--deframe-widget-color-border-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] overflow-hidden hover:border-[color:var(--deframe-widget-color-border-primary)] transition-colors flex items-center px-[var(--deframe-widget-size-padding-x-sm)] py-[6px] w-full cursor-pointer'\n\n return (\n <button\n data-test-id={testId}\n type='button'\n onClick={onClick}\n className={twMerge(baseClasses, className)}\n aria-label={token ? token.symbol : selectTokenLabel}\n >\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)] flex-1'>\n {token\n ? (\n <>\n {token.logoURI\n ? (\n <img src={token.logoURI} alt={token.symbol} className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)]' />\n )\n : (\n <div className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-secondary)] text-[color:var(--deframe-widget-color-text-secondary)] flex items-center justify-center text-[10px] [font-weight:var(--deframe-widget-font-weight-semibold)]'>\n {(token.symbol || '').slice(0, 3).toUpperCase()}\n </div>\n )}\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-primary)]'>\n {token.symbol}\n </TextBody>\n </>\n )\n : (\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {selectTokenLabel}\n </TextBody>\n )}\n </div>\n <div className='flex items-center justify-center w-[18px] h-[18px]'>\n <HiChevronDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </button>\n )\n}\n","import React from 'react'\nimport { HiChevronDown } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\n\nexport interface SwapNetworkSelectorViewProps {\n chainLabel: string;\n chainImage?: string;\n onClick: () => void;\n directionLabel?: string;\n testId?: string;\n className?: string;\n}\n\nexport const SwapNetworkSelectorView: React.FC<SwapNetworkSelectorViewProps> = ({\n chainLabel,\n chainImage,\n onClick,\n directionLabel = 'De',\n testId = 'swap-network-selector',\n className,\n}) => {\n const baseClasses = 'flex flex-row items-center gap-[var(--deframe-widget-size-gap-xs)]'\n\n return (\n <div data-test-id={testId} className={twMerge(baseClasses, className)}>\n <TextBody as='span' variant='text-small' className='tracking-wide text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {directionLabel}\n </TextBody>\n <button\n data-testid={testId}\n type='button'\n onClick={onClick}\n className='ml-[var(--deframe-widget-size-gap-lg)] bg-[var(--deframe-widget-color-bg-tertiary)] border border-[color:var(--deframe-widget-color-border-tertiary)] rounded-[var(--deframe-widget-size-radius-md)] flex items-center gap-[var(--deframe-widget-size-gap-xs)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] hover:border-[color:var(--deframe-widget-color-border-secondary)] transition-colors [font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)] cursor-pointer'\n aria-label={`${directionLabel} ${chainLabel}`}\n >\n {chainImage\n ? (\n <img src={chainImage} alt={chainLabel} className='w-3 h-3 rounded-[var(--deframe-widget-size-radius-full)]' />\n )\n : null}\n <span>{chainLabel}</span>\n <div className='flex items-center justify-center w-[18px] h-[18px]'>\n <HiChevronDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </button>\n </div>\n )\n}\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { SwapTokenSelectorView } from '../swap-token-selector'\nimport { SwapNetworkSelectorView } from '../swap-network-selector'\nimport { SwapAmountInputView, type InputFieldRegistration } from '../swap-amount-input'\nimport { LoadingDots } from '../loading-dots'\nimport { TextBody } from '../texts'\nimport type { SwapCardLabels } from '../../types/swap-card-labels'\n\nexport interface SwapFromCardViewProps {\n labels: SwapCardLabels;\n selectedToken: { symbol: string; logoURI?: string } | null;\n onTokenClick: () => void;\n /** Opens the unified network + asset selector. Used by Simple variants. */\n onNetworkAndAssetClick?: () => void;\n balanceFormatted: string;\n balanceUsdFormatted: string;\n onBalanceClick?: () => void;\n chainLabel: string;\n chainImage?: string;\n onNetworkClick: () => void;\n amountValue: string;\n amountHasError: boolean;\n onAmountChange: (value: string) => void;\n maxFractionDigits?: number;\n amountUsdFormatted: string;\n isAmountUsdLoading: boolean;\n /** Optional inline error message consumed by simple variants. */\n errorMessage?: string;\n /** react-hook-form field registration (name, onBlur, ref) */\n field?: InputFieldRegistration;\n}\n\nexport const SwapFromCardView: React.FC<SwapFromCardViewProps> = ({\n labels,\n selectedToken,\n onTokenClick,\n balanceFormatted,\n balanceUsdFormatted,\n onBalanceClick,\n chainLabel,\n chainImage,\n onNetworkClick,\n amountValue,\n amountHasError,\n onAmountChange,\n maxFractionDigits,\n amountUsdFormatted,\n isAmountUsdLoading,\n field,\n}) => {\n return (\n <SectionCard className='flex flex-col gap-sm'>\n <div className='flex flex-row gap-md items-center'>\n <div className='flex flex-col gap-sm flex-1'>\n <SwapTokenSelectorView\n token={selectedToken}\n onClick={onTokenClick}\n testId='swap-from-token-selector'\n selectTokenLabel={labels.selectTokenLabel}\n />\n <TextBody\n variant='text-small'\n className='text-text-tertiary dark:text-text-tertiary-dark'\n >\n {onBalanceClick\n ? (\n <button\n type='button'\n onClick={onBalanceClick}\n className='cursor-pointer hover:text-text-secondary dark:hover:text-text-secondary-dark transition-colors'\n data-testid='swap-from-balance'\n >\n {labels.balanceLabel}: {balanceFormatted} ({balanceUsdFormatted})\n </button>\n )\n : (\n <span data-testid='swap-from-balance'>\n {labels.balanceLabel}: {balanceFormatted} ({balanceUsdFormatted})\n </span>\n )}\n </TextBody>\n <SwapNetworkSelectorView\n chainLabel={chainLabel}\n chainImage={chainImage}\n onClick={onNetworkClick}\n directionLabel={labels.directionLabel}\n testId='swap-from-network-selector'\n />\n </div>\n <div className='flex flex-col flex-1 items-end justify-center gap-xs'>\n <SwapAmountInputView\n value={amountValue}\n hasError={amountHasError}\n onChange={onAmountChange}\n maxFractionDigits={maxFractionDigits}\n ariaLabel={labels.amountPlaceholder}\n field={field}\n />\n <TextBody\n as='span'\n variant='text-small'\n className={\n amountHasError\n ? 'text-state-error dark:text-state-error'\n : 'text-text-tertiary dark:text-text-tertiary-dark'\n }\n >\n {isAmountUsdLoading ? <LoadingDots /> : amountUsdFormatted}\n </TextBody>\n </div>\n </div>\n </SectionCard>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\n\nexport interface SwapOutputAmountViewProps {\n displayOutput: string | number;\n isLoading: boolean;\n loadingElement?: React.ReactNode;\n searchingQuoteLabel?: string;\n className?: string;\n}\n\nexport const SwapOutputAmountView: React.FC<SwapOutputAmountViewProps> = ({\n displayOutput,\n isLoading,\n loadingElement,\n searchingQuoteLabel = 'Searching quote...',\n className,\n}) => {\n const baseClasses = '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] text-right w-full min-w-[120px] text-[color:var(--deframe-widget-color-text-primary)]'\n\n return (\n <div data-test-id='swap-flow-output-amount' className={twMerge(baseClasses, className)}>\n {isLoading\n ? (\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-primary-disabled)] inline-flex items-center'>\n {loadingElement ?? searchingQuoteLabel}\n </TextBody>\n )\n : (\n displayOutput\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { SwapTokenSelectorView } from '../swap-token-selector'\nimport { SwapNetworkSelectorView } from '../swap-network-selector'\nimport { SwapOutputAmountView } from '../swap-output-amount'\nimport { LoadingDots } from '../loading-dots'\nimport { TextBody } from '../texts'\nimport type { SwapCardLabels } from '../../types/swap-card-labels'\n\nexport interface SwapToCardViewProps {\n labels: SwapCardLabels;\n selectedToken: { symbol: string; logoURI?: string } | null;\n onTokenClick: () => void;\n /** Opens the unified network + asset selector. Used by Simple variants. */\n onNetworkAndAssetClick?: () => void;\n balanceFormatted: string;\n balanceUsdFormatted: string;\n chainLabel: string;\n chainImage?: string;\n onNetworkClick: () => void;\n outputAmount: string;\n isOutputLoading: boolean;\n outputUsdFormatted: string;\n isOutputUsdLoading: boolean;\n}\n\nexport const SwapToCardView: React.FC<SwapToCardViewProps> = ({\n labels,\n selectedToken,\n onTokenClick,\n balanceFormatted,\n balanceUsdFormatted,\n chainLabel,\n chainImage,\n onNetworkClick,\n outputAmount,\n isOutputLoading,\n outputUsdFormatted,\n isOutputUsdLoading,\n}) => {\n const loadingElement = labels.searchingQuoteLabel\n ? (\n <>\n {labels.searchingQuoteLabel}\n <LoadingDots />\n </>\n )\n : undefined\n\n return (\n <SectionCard className='flex flex-col gap-sm'>\n <div className='flex flex-row gap-md items-center'>\n <div className='flex flex-col gap-sm flex-1'>\n <SwapTokenSelectorView\n token={selectedToken}\n onClick={onTokenClick}\n testId='swap-to-token-selector'\n selectTokenLabel={labels.selectTokenLabel}\n />\n <TextBody\n variant='text-small'\n className='text-text-tertiary dark:text-text-tertiary-dark'\n >\n <span data-testid='swap-to-balance'>\n {labels.balanceLabel}: {balanceFormatted} ({balanceUsdFormatted})\n </span>\n </TextBody>\n <SwapNetworkSelectorView\n chainLabel={chainLabel}\n chainImage={chainImage}\n onClick={onNetworkClick}\n directionLabel={labels.directionLabel}\n testId='swap-to-network-selector'\n />\n </div>\n <div className='flex flex-col flex-1 items-end justify-center gap-xs'>\n <SwapOutputAmountView\n displayOutput={outputAmount}\n isLoading={isOutputLoading}\n loadingElement={loadingElement}\n searchingQuoteLabel={labels.searchingQuoteLabel}\n />\n <TextBody\n as='span'\n variant='text-small'\n className='text-text-tertiary dark:text-text-tertiary-dark'\n >\n {isOutputUsdLoading ? <LoadingDots /> : outputUsdFormatted}\n </TextBody>\n </div>\n </div>\n </SectionCard>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nconst SLIPPAGE_OPTIONS = [10, 50, 100] // basis points\n\nexport interface SwapSlippageToleranceButtonsViewProps {\n slippageBps: number;\n onSelect: (bps: number) => void;\n formatPercentage: (bps: number) => string;\n className?: string;\n}\n\nexport const SwapSlippageToleranceButtonsView: React.FC<SwapSlippageToleranceButtonsViewProps> = ({\n slippageBps,\n onSelect,\n formatPercentage,\n className,\n}) => {\n const baseClasses = 'flex gap-[var(--deframe-widget-size-gap-xs)]'\n\n return (\n <div data-test-id='swap-slippage-tolerance-buttons' className={twMerge(baseClasses, className)}>\n {SLIPPAGE_OPTIONS.map((option) => {\n const isActive = slippageBps === option\n const activeClasses = 'border-[color:var(--deframe-widget-color-brand-primary)] text-[color:var(--deframe-widget-color-brand-primary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_18%,transparent)]'\n const inactiveClasses = 'border-[color:var(--deframe-widget-color-border-tertiary)] text-[color:var(--deframe-widget-color-text-secondary)] bg-[var(--deframe-widget-color-bg-primary)]'\n const buttonBase = 'px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] rounded-[var(--deframe-widget-size-radius-xs)] border [font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] cursor-pointer'\n\n return (\n <button\n key={option}\n data-test-id={`slippage-option-${option}`}\n type='button'\n onClick={() => onSelect(option)}\n className={twMerge(buttonBase, isActive ? activeClasses : inactiveClasses)}\n aria-label={`${formatPercentage(option)}% slippage`}\n aria-pressed={isActive}\n >\n {formatPercentage(option)}\n </button>\n )\n })}\n </div>\n )\n}\n","import React from 'react'\nimport { CollapsibleSection } from '../collapsible-section'\nimport { SectionCard } from '../layout'\nimport { SwapSlippageToleranceButtonsView } from '../swap-slippage-tolerance-buttons'\nimport PercentageButton from '../buttons/percentage-button/PercentageButton'\n\nexport interface SwapAdvancedSettingsViewProps {\n title: string;\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n slippageBps: number;\n onSlippageSelect: (bps: number) => void;\n formatPercentage: (bps: number) => string;\n percentageOptions: number[];\n onPercentageClick: (pct: number) => void;\n slippageFormatted: string;\n collapseText: string;\n expandText: string;\n maxLabel: string;\n}\n\nexport const SwapAdvancedSettingsView: React.FC<SwapAdvancedSettingsViewProps> = ({\n title,\n isOpen,\n onOpenChange,\n slippageBps,\n onSlippageSelect,\n formatPercentage,\n percentageOptions,\n onPercentageClick,\n slippageFormatted,\n collapseText,\n expandText,\n maxLabel,\n}) => {\n return (\n <div className='pb-2 mt-md'>\n <SectionCard>\n <CollapsibleSection\n title={title}\n subtitle={slippageFormatted}\n open={isOpen}\n onOpenChange={onOpenChange}\n collapseText={collapseText}\n expandText={expandText}\n >\n <SwapSlippageToleranceButtonsView\n slippageBps={slippageBps}\n onSelect={onSlippageSelect}\n formatPercentage={formatPercentage}\n className='mt-md'\n />\n <div className='w-full mt-md'>\n <div className='flex w-full gap-sm'>\n {percentageOptions.map((pct, index) => {\n const isMax = index === percentageOptions.length - 1\n const label = isMax ? maxLabel : `${pct / 100}%`\n return (\n <PercentageButton\n key={pct}\n type='button'\n onClick={() => onPercentageClick(pct)}\n >\n {label}\n </PercentageButton>\n )\n })}\n </div>\n </div>\n </CollapsibleSection>\n </SectionCard>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\n\nexport interface SwapQuoteHeaderViewProps {\n label: React.ReactNode;\n timerElement?: React.ReactNode;\n className?: string;\n}\n\nexport const SwapQuoteHeaderView: React.FC<SwapQuoteHeaderViewProps> = ({\n label,\n timerElement,\n className,\n}) => {\n const baseClasses = 'border-b border-[color:var(--deframe-widget-color-border-secondary)] pb-[var(--deframe-widget-size-padding-y-sm)]'\n\n return (\n <div data-test-id='swap-quote-header' className={twMerge(baseClasses, className)}>\n <div className='flex items-center justify-between'>\n <TextBody as='span' variant='text-small' className='[font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-secondary)] inline-flex items-center'>\n {label}\n </TextBody>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-md)]'>\n {timerElement}\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { CollapsibleInfoRow } from '../info-display/CollapsibleInfoRow'\nimport { InfoRowWithIcon } from '../info-display/InfoRowWithIcon'\nimport { InfoRowIconLabel } from '../info-display/InfoRowIconLabel'\nimport { InfoRowIconValue } from '../info-display/InfoRowIconValue'\n\nexport interface SwapQuoteBlockchainCostsViewProps {\n totalCostFormatted: string;\n feePercentage: string;\n gasCostFormatted: string;\n protocolFee: string;\n blockchainCostsLabel?: string;\n networkGasLabel?: string;\n protocolFeeLabel?: string;\n collapseLabel?: string;\n expandLabel?: string;\n}\n\nexport const SwapQuoteBlockchainCostsView: React.FC<SwapQuoteBlockchainCostsViewProps> = ({\n totalCostFormatted,\n feePercentage,\n gasCostFormatted,\n protocolFee,\n blockchainCostsLabel = 'Blockchain Costs',\n networkGasLabel = 'Network Gas',\n protocolFeeLabel = 'Protocol Fee',\n collapseLabel = 'Collapse',\n expandLabel = 'Expand',\n}) => {\n return (\n <div data-test-id='swap-quote-blockchain-costs'>\n <CollapsibleInfoRow\n label={blockchainCostsLabel}\n value={`${totalCostFormatted} ~ ${feePercentage}%`}\n defaultOpen\n collapseLabel={collapseLabel}\n expandLabel={expandLabel}\n >\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)]'>\n <InfoRowWithIcon>\n <InfoRowIconLabel>{networkGasLabel}</InfoRowIconLabel>\n <InfoRowIconValue>{gasCostFormatted}</InfoRowIconValue>\n </InfoRowWithIcon>\n <InfoRowWithIcon borderBottom>\n <InfoRowIconLabel>{protocolFeeLabel}</InfoRowIconLabel>\n <InfoRowIconValue>{protocolFee}</InfoRowIconValue>\n </InfoRowWithIcon>\n </div>\n </CollapsibleInfoRow>\n </div>\n )\n}\n","import React from 'react'\nimport { BannerNotification } from '../banner'\n\nexport interface SwapQuoteErrorsViewProps {\n hasQuoteError: boolean;\n hasBytecodeError: boolean;\n quoteErrorMessage?: string;\n bytecodeErrorMessage?: string;\n}\n\nexport const SwapQuoteErrorsView: React.FC<SwapQuoteErrorsViewProps> = ({\n hasQuoteError,\n hasBytecodeError,\n quoteErrorMessage = 'Unable to get quote for this transaction',\n bytecodeErrorMessage = 'Error building transaction',\n}) => {\n return (\n <div data-test-id='swap-quote-errors'>\n {hasQuoteError && (\n <div className='mt-sm'>\n <BannerNotification\n type='inline'\n variant='error'\n message={quoteErrorMessage}\n />\n </div>\n )}\n {hasBytecodeError && (\n <div className='mt-sm'>\n <BannerNotification\n type='inline'\n variant='error'\n message={bytecodeErrorMessage}\n />\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { SummaryDetails, type DetailItem } from '../details'\nimport { SwapQuoteHeaderView } from '../swap-quote-header'\nimport { SwapQuoteBlockchainCostsView } from '../swap-quote-blockchain-costs'\nimport { SwapQuoteErrorsView } from '../swap-quote-errors'\nimport { LoadingDots } from '../loading-dots'\nimport type { SwapQuoteDetailsLabels } from '../../types/swap-quote-details-labels'\n\nexport interface SwapQuoteDetailsViewProps {\n labels: SwapQuoteDetailsLabels;\n isVisible: boolean;\n isLoading: boolean;\n quoteHeaderLabel: React.ReactNode;\n timerElement?: React.ReactNode;\n exchangeRateFormatted: string;\n totalCostFormatted: string;\n feePercentage: string;\n gasCostFormatted: string;\n protocolFee: string;\n slippageFormatted: string;\n etaFormatted: string;\n quoteId: string;\n hasQuoteError: boolean;\n hasBytecodeError: boolean;\n quoteErrorMessage?: string;\n bytecodeErrorMessage?: string;\n}\n\nexport const SwapQuoteDetailsView: React.FC<SwapQuoteDetailsViewProps> = ({\n labels,\n isVisible,\n isLoading,\n quoteHeaderLabel,\n timerElement,\n exchangeRateFormatted,\n totalCostFormatted,\n feePercentage,\n gasCostFormatted,\n protocolFee,\n slippageFormatted,\n etaFormatted,\n quoteId,\n hasQuoteError,\n hasBytecodeError,\n quoteErrorMessage,\n bytecodeErrorMessage,\n}) => {\n const headerLabel = isLoading\n ? (\n <>\n {quoteHeaderLabel}\n <LoadingDots />\n </>\n )\n : (\n quoteHeaderLabel\n )\n\n const items: DetailItem[] = [\n {\n label: '',\n value: (\n <SwapQuoteHeaderView label={headerLabel} timerElement={timerElement} />\n ),\n valueClassName: 'w-full',\n },\n {\n label: labels.exchangeRateLabel,\n value: exchangeRateFormatted,\n },\n {\n label: '',\n value: (\n <SwapQuoteBlockchainCostsView\n totalCostFormatted={totalCostFormatted}\n feePercentage={feePercentage}\n gasCostFormatted={gasCostFormatted}\n protocolFee={protocolFee}\n blockchainCostsLabel={labels.blockchainCostsLabel}\n networkGasLabel={labels.networkGasLabel}\n protocolFeeLabel={labels.protocolFeeLabel}\n collapseLabel={labels.costsCollapseLabel}\n expandLabel={labels.costsExpandLabel}\n />\n ),\n valueClassName: 'flex flex-col gap-sm w-full text-right',\n },\n {\n label: labels.slippageLabel,\n value: slippageFormatted,\n },\n {\n label: labels.etaLabel,\n value: etaFormatted,\n },\n ]\n\n if (quoteId) {\n items.push({ label: labels.quoteIdLabel, value: quoteId })\n }\n\n return (\n <div className='w-full'>\n <SummaryDetails\n key={`details-${isVisible}`}\n title={labels.headerLabel}\n items={items}\n defaultOpen={isVisible}\n className='rounded shadow-sm p-md flex flex-col bg-[var(--deframe-widget-color-bg-subtle)] lg:bg-[var(--deframe-widget-color-bg-raised)]'\n />\n <SwapQuoteErrorsView\n hasQuoteError={hasQuoteError}\n hasBytecodeError={hasBytecodeError}\n quoteErrorMessage={quoteErrorMessage}\n bytecodeErrorMessage={bytecodeErrorMessage}\n />\n </div>\n )\n}\n","import React from 'react'\nimport PrimaryButton from '../buttons/primary-button/PrimaryButton'\nimport { LoadingDots } from '../loading-dots'\nimport type { ConfirmSwapButtonLabels } from '../../types/confirm-swap-button-labels'\n\nexport interface ConfirmSwapButtonViewProps {\n labels: ConfirmSwapButtonLabels;\n buttonLabel: string;\n disabled: boolean;\n isLoading: boolean;\n onClick: () => void;\n}\n\nexport const ConfirmSwapButtonView: React.FC<ConfirmSwapButtonViewProps> = ({\n buttonLabel,\n disabled,\n isLoading,\n onClick,\n}) => {\n return (\n <div data-testid='swap-confirm-button-wrapper'>\n <PrimaryButton\n onClick={onClick}\n className='w-full'\n disabled={disabled}\n >\n {buttonLabel}\n {isLoading && <LoadingDots />}\n </PrimaryButton>\n </div>\n )\n}\n","import React from 'react'\nimport { TextBody, TextHeading } from '../texts'\nimport { MdHistory, MdOutlineSwapVert } from 'react-icons/md'\nimport type { SwapFormLabels } from '../../types/swap-form-labels'\nimport { SwapFromCardView, type SwapFromCardViewProps } from '../swap-from-card-view/SwapFromCardView'\nimport { SwapToCardView, type SwapToCardViewProps } from '../swap-to-card-view/SwapToCardView'\nimport { SwapAdvancedSettingsView, type SwapAdvancedSettingsViewProps } from '../swap-advanced-settings-view/SwapAdvancedSettingsView'\nimport { SwapQuoteDetailsView, type SwapQuoteDetailsViewProps } from '../swap-quote-details-view/SwapQuoteDetailsView'\nimport { ConfirmSwapButtonView, type ConfirmSwapButtonViewProps } from '../confirm-swap-button-view/ConfirmSwapButtonView'\n\nexport interface SwapFormViewProps {\n // Form\n onSubmit: React.FormEventHandler<HTMLFormElement>;\n formRef?: React.Ref<HTMLFormElement>;\n\n // Layout\n labels: SwapFormLabels;\n onHistoryClick: () => void;\n onSwitchTokens: () => void;\n switchTokensAriaLabel: string;\n\n // Typed child view props (pattern EarnDesktopView)\n fromCard: SwapFromCardViewProps;\n toCard: SwapToCardViewProps;\n advancedSettings: SwapAdvancedSettingsViewProps;\n transactionDetails: SwapQuoteDetailsViewProps;\n confirmButton: ConfirmSwapButtonViewProps;\n}\n\nexport const SwapFormView: React.FC<SwapFormViewProps> = ({\n onSubmit,\n formRef,\n labels,\n onHistoryClick,\n onSwitchTokens,\n switchTokensAriaLabel,\n fromCard,\n toCard,\n advancedSettings,\n transactionDetails,\n confirmButton,\n}) => {\n return (\n <>\n <div\n data-testid='swap-form-view'\n className='flex-1 min-h-0 overflow-y-auto swap-flow-content pr-sm'\n >\n <form ref={formRef} onSubmit={onSubmit} data-testid='swap-flow-form'>\n <div className='flex flex-col gap-md text-text-secondary dark:text-text-secondary-dark'>\n <div className='flex items-start justify-between gap-md'>\n <div className='flex flex-col gap-sm'>\n <TextHeading variant='h5' className='!text-[21px]'>\n <span data-testid='swap-flow-title'>{labels.title}</span>\n </TextHeading>\n {labels.subtitle && (\n <TextBody variant='text-small' className='!text-[14px]'>\n {labels.subtitle}\n </TextBody>\n )}\n </div>\n <button\n data-testid='swap-history-button'\n type='button'\n onClick={onHistoryClick}\n className='flex items-center justify-center w-12 h-12 transition-colors rounded-full cursor-pointer text-text-secondary dark:text-text-secondary-dark hover:text-brand-primary'\n aria-label={labels.historyAriaLabel}\n >\n <MdHistory className='w-6 h-6' />\n </button>\n </div>\n <div className='relative flex flex-col items-stretch gap-sm'>\n <SwapFromCardView {...fromCard} />\n <div className='flex justify-center -my-5 relative z-10'>\n <button\n data-testid='swap-switch-tokens-button'\n type='button'\n onClick={onSwitchTokens}\n className='w-10 h-10 rounded-full bg-brand-secondary shadow-md flex items-center justify-center text-text-primary hover:shadow-lg transition-shadow focus:outline-none focus:ring-2 focus:ring-brand-secondary cursor-pointer'\n aria-label={switchTokensAriaLabel}\n >\n <MdOutlineSwapVert className='w-5 h-5' />\n </button>\n </div>\n <SwapToCardView {...toCard} />\n </div>\n <SwapAdvancedSettingsView {...advancedSettings} />\n <div className='pb-xl'>\n <SwapQuoteDetailsView {...transactionDetails} />\n </div>\n </div>\n </form>\n </div>\n <div\n data-testid='swap-flow-footer'\n className='border-t p-md border-border-default dark:border-border-default-dark bg-bg-primary dark:bg-bg-primary-dark'\n >\n <ConfirmSwapButtonView {...confirmButton} />\n </div>\n </>\n )\n}\n","import React, { useCallback, useRef, useState } from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport type { SwapFromCardViewProps } from './SwapFromCardView'\nimport { LoadingDots } from '../loading-dots'\n\n// ── Props ────────────────────────────────────────────────────────────────────\n\nexport interface SwapFromCardViewSimpleProps extends SwapFromCardViewProps {\n /** Percentage chip values, e.g. [25, 50, 75, 100] */\n percentageOptions?: number[]\n /** Called when a chip is clicked */\n onPercentageClick?: (pct: number) => void\n /** Currently active chip (null = none) */\n selectedPercentage?: number | null\n /** Label for the last (100 %) chip. Default: 'Max.' */\n maxLabel?: string\n /** Custom label for the error action button */\n errorActionLabel?: string\n /** Called when the error action button is clicked */\n onErrorAction?: () => void\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nexport const SwapFromCardViewSimple: React.FC<SwapFromCardViewSimpleProps> = ({\n labels,\n selectedToken,\n onTokenClick,\n onNetworkAndAssetClick,\n balanceFormatted,\n onBalanceClick,\n chainLabel,\n chainImage,\n amountValue,\n amountHasError,\n onAmountChange,\n amountUsdFormatted,\n isAmountUsdLoading,\n field,\n percentageOptions,\n onPercentageClick,\n selectedPercentage = null,\n maxLabel = 'Max.',\n errorMessage = 'Saldo insuficiente para realizar a troca.',\n errorActionLabel = 'Adicionar via PIX',\n onErrorAction,\n}) => {\n // ── Hover state for percentage chips with 150 ms hide delay ──────────────\n const [isHovered, setIsHovered] = useState(false)\n const hideTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleMouseEnter = useCallback(() => {\n if (hideTimeout.current) {\n clearTimeout(hideTimeout.current)\n hideTimeout.current = null\n }\n setIsHovered(true)\n }, [])\n\n const handleMouseLeave = useCallback(() => {\n hideTimeout.current = setTimeout(() => setIsHovered(false), 150)\n }, [])\n\n // ── Styling ──────────────────────────────────────────────────────────────\n const wrapperClasses = twMerge(\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n 'transition-[border-color,background] duration-200',\n amountHasError\n ? 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)]'\n : 'border-[color:var(--deframe-widget-color-border-secondary)] bg-[var(--deframe-widget-color-bg-secondary)]'\n )\n\n const isEmpty = !amountValue || Number(amountValue) === 0\n\n const showChips = isHovered && percentageOptions && percentageOptions.length > 0 && onPercentageClick\n\n return (\n <div\n data-test-id='swap-from-card-simple'\n className={wrapperClasses}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {/* ── Top row: token selector | divider | amount input ── */}\n <div\n data-test-id='swap-from-card-simple-top-row'\n className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'\n >\n {/* Token selector area */}\n <TokenSelectorArea\n selectedToken={selectedToken}\n chainLabel={chainLabel}\n chainImage={chainImage}\n onTokenClick={onNetworkAndAssetClick ?? onTokenClick}\n selectTokenLabel={labels.selectTokenLabel}\n />\n\n {/* Vertical divider */}\n <div\n data-test-id='swap-from-card-simple-divider'\n className='w-px h-10 bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0'\n />\n\n {/* Amount input area */}\n <div\n data-test-id='swap-from-card-simple-amount-wrapper'\n className='flex flex-col items-end flex-1 min-w-0'\n >\n <input\n data-test-id='swap-from-card-simple-amount-input'\n type='text'\n inputMode='decimal'\n autoComplete='off'\n placeholder='0'\n aria-label={labels.amountPlaceholder}\n value={amountValue || ''}\n className={twMerge(\n 'bg-transparent border-none outline-none',\n 'text-right',\n 'text-[36px] [font-weight:var(--deframe-widget-font-weight-semibold)] [line-height:1.1]',\n 'w-full px-[var(--deframe-widget-size-padding-x-none)] py-[var(--deframe-widget-size-padding-y-none)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'placeholder:text-[color:var(--deframe-widget-color-text-tertiary)]',\n isEmpty\n ? 'text-[color:var(--deframe-widget-color-text-tertiary)]'\n : 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n {...(field\n ? { name: field.name, onBlur: field.onBlur, ref: field.ref }\n : {})}\n onChange={(e) => onAmountChange(e.target.value)}\n onWheel={(e: React.WheelEvent<HTMLInputElement>) => {\n e.currentTarget.blur()\n }}\n />\n <span\n data-test-id='swap-from-card-simple-usd-conversion'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n {isAmountUsdLoading ? <LoadingDots /> : amountUsdFormatted}\n </span>\n </div>\n </div>\n\n {/* ── Balance row — hidden when no token selected ── */}\n {selectedToken && (\n <div\n data-test-id='swap-from-card-simple-balance-row'\n className='flex items-center justify-between mt-[var(--deframe-widget-size-gap-sm)]'\n >\n {onBalanceClick\n ? (\n <button\n data-test-id='swap-from-card-simple-balance'\n type='button'\n onClick={onBalanceClick}\n aria-label={`${labels.balanceLabel}: ${balanceFormatted}`}\n className={twMerge(\n 'text-[13px] font-[var(--deframe-widget-font-family)] cursor-pointer',\n 'bg-transparent border-none outline-none p-0',\n 'text-[color:var(--deframe-widget-color-text-tertiary)]',\n 'hover:text-[color:var(--deframe-widget-color-text-secondary)]',\n 'transition-colors duration-150'\n )}\n >\n {labels.balanceLabel}:{' '}\n <span\n data-test-id='swap-from-card-simple-balance-value'\n className={\n amountHasError\n ? 'text-[color:var(--deframe-widget-color-state-error)]'\n : 'text-[color:var(--deframe-widget-color-text-secondary)]'\n }\n >\n {balanceFormatted}\n </span>\n </button>\n )\n : (\n <span\n data-test-id='swap-from-card-simple-balance'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n {labels.balanceLabel}:{' '}\n <span\n data-test-id='swap-from-card-simple-balance-value'\n className={\n amountHasError\n ? 'text-[color:var(--deframe-widget-color-state-error)]'\n : 'text-[color:var(--deframe-widget-color-text-secondary)]'\n }\n >\n {balanceFormatted}\n </span>\n </span>\n )}\n </div>\n )}\n\n {/* ── Percentage chips (hover-reveal with AnimatePresence) ── */}\n <AnimatePresence>\n {showChips && (\n <motion.div\n data-test-id='swap-from-card-simple-chips'\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: 'auto' }}\n exit={{ opacity: 0, height: 0 }}\n transition={{ duration: 0.15 }}\n className='overflow-hidden mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <div\n data-test-id='swap-from-card-simple-chips-row'\n className='flex gap-[6px] items-center'\n >\n {percentageOptions!.map((pct, i) => {\n const isLast = i === percentageOptions!.length - 1\n const isActive = pct === selectedPercentage\n const chipLabel = isLast ? maxLabel : `${pct / 100}%`\n\n return (\n <ChipPill\n key={pct}\n label={chipLabel}\n active={isActive}\n onClick={() => onPercentageClick!(pct)}\n />\n )\n })}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* ── Inline error notification ── */}\n {amountHasError && (\n <div\n data-test-id='swap-from-card-simple-error'\n className='mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <InlineNotificationBar\n message={errorMessage}\n actionLabel={errorActionLabel}\n onAction={onErrorAction}\n />\n </div>\n )}\n </div>\n )\n}\n\n// ── TokenSelectorArea (internal) ─────────────────────────────────────────────\n\ninterface TokenSelectorAreaProps {\n selectedToken: SwapFromCardViewSimpleProps['selectedToken']\n chainLabel: string\n chainImage?: string\n onTokenClick: () => void\n selectTokenLabel: string\n}\n\nfunction TokenSelectorArea ({\n selectedToken,\n chainLabel,\n chainImage,\n onTokenClick,\n selectTokenLabel,\n}: TokenSelectorAreaProps) {\n return (\n <button\n data-test-id='swap-from-card-simple-token-selector'\n type='button'\n onClick={onTokenClick}\n aria-label={\n selectedToken\n ? `Select token — currently ${selectedToken.symbol} on ${chainLabel}`\n : selectTokenLabel\n }\n className={twMerge(\n 'inline-flex items-center gap-[10px]',\n 'h-[54px] px-[10px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'border-none outline-none',\n 'transition-[background] duration-150',\n 'flex-shrink-0',\n 'cursor-pointer hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_72%,transparent)]'\n )}\n >\n {selectedToken\n ? (\n <>\n {/* Token icon with network badge */}\n <TokenIconWithBadge\n token={selectedToken}\n chainLabel={chainLabel}\n chainImage={chainImage}\n />\n\n {/* Token info: symbol + network */}\n <div\n data-test-id='swap-from-card-simple-token-info'\n className='flex flex-col items-start min-w-0'\n >\n <span\n data-test-id='swap-from-card-simple-token-symbol'\n className={twMerge(\n 'text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] leading-[1.2]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n >\n {selectedToken.symbol}\n </span>\n <span\n data-test-id='swap-from-card-simple-token-network'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-tertiary)] uppercase tracking-[0.04em] font-[var(--deframe-widget-font-family)] leading-[1.2]'\n >\n {chainLabel}\n </span>\n </div>\n\n {/* Chevron */}\n <ChevronDown />\n </>\n )\n : (\n <>\n <span\n data-test-id='swap-from-card-simple-token-placeholder-label'\n className={twMerge(\n 'text-[11px] [font-weight:var(--deframe-widget-font-weight-regular)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'whitespace-nowrap uppercase'\n )}\n >\n {selectTokenLabel}\n </span>\n <ChevronDown />\n </>\n )}\n </button>\n )\n}\n\n// ── TokenIconWithBadge (internal) ────────────────────────────────────────────\n\ninterface TokenIconWithBadgeProps {\n token: { symbol: string; logoURI?: string }\n chainLabel: string\n chainImage?: string\n}\n\nfunction TokenIconWithBadge ({ token, chainLabel, chainImage }: TokenIconWithBadgeProps) {\n const [imgError, setImgError] = useState(false)\n const [badgeError, setBadgeError] = useState(false)\n const size = 38\n const badgeSize = 16\n\n return (\n <div\n data-test-id='swap-from-card-simple-token-icon'\n className='relative flex-shrink-0'\n style={{ width: size, height: size }}\n >\n {/* Main token icon */}\n {token.logoURI && !imgError\n ? (\n <img\n data-test-id='swap-from-card-simple-token-icon-img'\n src={token.logoURI}\n alt={token.symbol}\n width={size}\n height={size}\n className='rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 object-cover'\n onError={() => setImgError(true)}\n />\n )\n : (\n <div\n data-test-id='swap-from-card-simple-token-icon-fallback'\n className={twMerge(\n 'rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0',\n 'flex items-center justify-center',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n 'text-[color:var(--deframe-widget-color-text-primary-dark)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]'\n )}\n style={{ width: size, height: size, fontSize: size * 0.33 }}\n >\n {token.symbol.slice(0, 2).toUpperCase()}\n </div>\n )}\n\n {/* Network badge */}\n {chainImage && !badgeError\n ? (\n <div\n data-test-id='swap-from-card-simple-token-badge'\n className='absolute -bottom-0.5 -right-0.5 rounded-[var(--deframe-widget-size-radius-full)] shadow-[0_0_0_2px_var(--deframe-widget-color-bg-secondary)]'\n >\n <img\n data-test-id='swap-from-card-simple-token-badge-img'\n src={chainImage}\n alt={chainLabel}\n width={badgeSize}\n height={badgeSize}\n className='rounded-[var(--deframe-widget-size-radius-full)] object-cover'\n onError={() => setBadgeError(true)}\n />\n </div>\n )\n : chainLabel\n ? (\n <div\n data-test-id='swap-from-card-simple-token-badge'\n className={twMerge(\n 'absolute -bottom-0.5 -right-0.5',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n 'shadow-[0_0_0_2px_var(--deframe-widget-color-bg-secondary)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'flex items-center justify-center',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n 'text-[color:var(--deframe-widget-color-text-primary-dark)]'\n )}\n style={{ width: badgeSize, height: badgeSize, fontSize: badgeSize * 0.45 }}\n >\n {chainLabel.slice(0, 1).toUpperCase()}\n </div>\n )\n : null}\n </div>\n )\n}\n\n// ── ChevronDown (internal) ───────────────────────────────────────────────────\n\nfunction ChevronDown () {\n return (\n <svg\n data-test-id='swap-from-card-simple-chevron'\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n className='flex-shrink-0 text-[color:var(--deframe-widget-color-text-secondary)]'\n aria-hidden='true'\n >\n <polyline points='6 9 12 15 18 9' />\n </svg>\n )\n}\n\n// ── ChipPill (internal) ──────────────────────────────────────────────────────\n\ninterface ChipPillProps {\n label: string\n active: boolean\n onClick: () => void\n}\n\nfunction ChipPill ({ label, active, onClick }: ChipPillProps) {\n const baseClasses = twMerge(\n 'inline-flex items-center justify-center',\n 'py-[3px] px-[10px]',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n 'cursor-pointer',\n 'text-[12px]',\n 'transition-all duration-150',\n 'outline-none',\n 'font-[var(--deframe-widget-font-family)]',\n 'whitespace-nowrap',\n 'border'\n )\n\n const stateClasses = active\n ? twMerge(\n 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)]',\n 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]',\n 'text-[color:var(--deframe-widget-color-brand-primary)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]'\n )\n : twMerge(\n 'border-[color:var(--deframe-widget-color-border-secondary)]',\n 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'hover:border-[color:var(--deframe-widget-color-border-primary)]',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]',\n 'hover:text-[color:var(--deframe-widget-color-text-primary)]'\n )\n\n return (\n <button\n data-test-id='swap-from-card-simple-chip'\n type='button'\n onClick={onClick}\n aria-label={label}\n className={twMerge(baseClasses, stateClasses)}\n >\n <span data-test-id='swap-from-card-simple-chip-label'>\n {label}\n </span>\n </button>\n )\n}\n\n// ── InlineNotificationBar (internal) ─────────────────────────────────────────\n\ninterface InlineNotificationBarProps {\n message: string\n actionLabel: string\n onAction?: () => void\n}\n\nfunction InlineNotificationBar ({ message, actionLabel, onAction }: InlineNotificationBarProps) {\n const wrapperClasses = twMerge(\n 'relative flex items-center gap-[var(--deframe-widget-size-gap-sm)]',\n 'py-[7px] pr-[10px] pl-[14px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border',\n 'overflow-hidden',\n 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)]',\n 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)]'\n )\n\n return (\n <div\n data-test-id='swap-from-card-simple-notification'\n role='alert'\n className={wrapperClasses}\n >\n {/* Left accent bar */}\n <div\n data-test-id='swap-from-card-simple-notification-accent'\n className={twMerge(\n 'absolute left-0 top-0 bottom-0 w-[3px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)_0_0_var(--deframe-widget-size-radius-sm)]',\n 'bg-[var(--deframe-widget-color-state-error)]'\n )}\n />\n\n {/* Dot indicator */}\n <div\n data-test-id='swap-from-card-simple-notification-dot'\n className='w-[6px] h-[6px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 bg-[var(--deframe-widget-color-state-error)]'\n />\n\n {/* Message */}\n <span\n data-test-id='swap-from-card-simple-notification-message'\n className='flex-1 text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] font-[var(--deframe-widget-font-family)] leading-[1.4]'\n >\n {message}\n </span>\n\n {/* Action button */}\n {onAction && (\n <button\n data-test-id='swap-from-card-simple-notification-action'\n type='button'\n onClick={onAction}\n aria-label={actionLabel}\n className={twMerge(\n 'flex-shrink-0 bg-none border-none cursor-pointer',\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'py-[var(--deframe-widget-size-padding-y-none)] px-[var(--deframe-widget-size-padding-x-xs)]',\n 'outline-none font-[var(--deframe-widget-font-family)] whitespace-nowrap',\n 'text-[color:var(--deframe-widget-color-state-error)]'\n )}\n >\n {actionLabel} &rarr;\n </button>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { LoadingDots } from '../loading-dots'\nimport type { SwapToCardViewProps } from './SwapToCardView'\n\nexport type { SwapToCardViewProps }\n\n// ── Inline IconCircle ────────────────────────────────────────────────────────\n\ninterface IconCircleItem {\n name: string\n color: string\n iconUrl?: string\n}\n\nfunction IconCircle ({ item, size = 36 }: { item: IconCircleItem; size?: number }) {\n const [imgError, setImgError] = React.useState(false)\n\n if (item.iconUrl && !imgError) {\n return (\n <img\n data-test-id='icon-circle-img'\n src={item.iconUrl}\n alt={item.name}\n width={size}\n height={size}\n className='rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 object-cover'\n onError={() => setImgError(true)}\n />\n )\n }\n\n return (\n <div\n data-test-id='icon-circle-fallback'\n className='rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 flex items-center justify-center [font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary-dark)]'\n style={{\n width: size,\n height: size,\n background: item.color,\n fontSize: size * 0.33,\n letterSpacing: '-0.01em',\n }}\n >\n {item.name.slice(0, 2).toUpperCase()}\n </div>\n )\n}\n\n// ── Inline TokenIcon with badge ──────────────────────────────────────────────\n\ninterface TokenIconBadge {\n name: string\n color: string\n iconUrl?: string\n}\n\nfunction TokenIcon ({\n token,\n size = 38,\n badge,\n badgeSize = 16,\n}: {\n token: { name: string; color: string; iconUrl?: string }\n size?: number\n badge?: TokenIconBadge\n badgeSize?: number\n}) {\n return (\n <div\n data-test-id='swap-to-simple-token-icon'\n className='relative flex-shrink-0'\n style={{ width: size, height: size }}\n >\n <IconCircle item={token} size={size} />\n {badge && (\n <div\n data-test-id='swap-to-simple-token-badge'\n className='absolute -bottom-0.5 -right-0.5 rounded-[var(--deframe-widget-size-radius-full)] shadow-[0_0_0_2px_var(--deframe-widget-color-bg-secondary)]'\n >\n <IconCircle item={badge} size={badgeSize} />\n </div>\n )}\n </div>\n )\n}\n\n// ── SwapToCardViewSimple ─────────────────────────────────────────────────────\n\nexport const SwapToCardViewSimple: React.FC<SwapToCardViewProps> = ({\n labels,\n selectedToken,\n onTokenClick,\n onNetworkAndAssetClick,\n balanceFormatted,\n balanceUsdFormatted,\n chainLabel,\n chainImage,\n outputAmount,\n isOutputLoading,\n outputUsdFormatted,\n isOutputUsdLoading,\n}) => {\n const handleTokenClick = onNetworkAndAssetClick ?? onTokenClick\n const isEmpty = !outputAmount || Number(outputAmount) === 0\n\n const wrapperClasses = twMerge(\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border',\n 'border-[color:var(--deframe-widget-color-border-secondary)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'px-[var(--deframe-widget-size-padding-x-md)]',\n 'py-[var(--deframe-widget-size-padding-y-md)]',\n 'font-[var(--deframe-widget-font-family)]'\n )\n\n const selectorBaseClasses = twMerge(\n 'inline-flex items-center gap-[10px]',\n 'h-[54px] px-[10px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'border-none',\n 'outline-none',\n 'transition-[background] duration-150',\n 'flex-shrink-0',\n 'cursor-pointer hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_72%,transparent)]'\n )\n\n return (\n <div data-test-id='swap-to-card-view-simple' className={wrapperClasses}>\n {/* Top row: token selector + divider + output amount */}\n <div\n data-test-id='swap-to-simple-top-row'\n className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'\n >\n {/* Token selector area */}\n {selectedToken\n ? (\n <button\n type='button'\n data-test-id='swap-to-simple-token-selector'\n onClick={handleTokenClick}\n aria-label={`Select token — currently ${selectedToken.symbol} on ${chainLabel}`}\n className={selectorBaseClasses}\n >\n <TokenIcon\n token={{\n name: selectedToken.symbol,\n color: 'var(--deframe-widget-color-brand-secondary)',\n iconUrl: selectedToken.logoURI,\n }}\n size={38}\n badge={\n chainLabel\n ? {\n name: chainLabel,\n color: 'var(--deframe-widget-color-brand-secondary)',\n iconUrl: chainImage,\n }\n : undefined\n }\n badgeSize={16}\n />\n <div\n data-test-id='swap-to-simple-token-info'\n className='flex flex-col items-start min-w-0'\n >\n <span\n data-test-id='swap-to-simple-token-symbol'\n className='text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] leading-[1.2] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'\n >\n {selectedToken.symbol}\n </span>\n <span\n data-test-id='swap-to-simple-token-network'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-tertiary)] uppercase tracking-[0.04em] font-[var(--deframe-widget-font-family)] leading-[1.2]'\n >\n {chainLabel}\n </span>\n </div>\n <svg\n data-test-id='swap-to-simple-chevron'\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n className='flex-shrink-0 text-[color:var(--deframe-widget-color-text-secondary)]'\n aria-hidden='true'\n >\n <polyline points='6 9 12 15 18 9' />\n </svg>\n </button>\n )\n : (\n <button\n type='button'\n data-test-id='swap-to-simple-token-placeholder'\n onClick={handleTokenClick}\n aria-label={labels.selectTokenLabel}\n className={selectorBaseClasses}\n >\n <span\n data-test-id='swap-to-simple-placeholder-label'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-regular)] leading-[1.2] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)] whitespace-nowrap uppercase'\n >\n {labels.selectTokenLabel}\n </span>\n <svg\n data-test-id='swap-to-simple-placeholder-chevron'\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n className='flex-shrink-0 text-[color:var(--deframe-widget-color-text-secondary)]'\n aria-hidden='true'\n >\n <polyline points='6 9 12 15 18 9' />\n </svg>\n </button>\n )}\n\n {/* Vertical divider */}\n <div\n data-test-id='swap-to-simple-divider'\n className='w-px h-10 bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0'\n />\n\n {/* Output amount area (right-aligned, read-only) */}\n <div\n data-test-id='swap-to-simple-output-wrapper'\n className='flex flex-col items-end flex-1 min-w-0'\n >\n {isOutputLoading\n ? (\n <span\n data-test-id='swap-to-simple-output-loading'\n className={twMerge(\n 'text-[36px] [font-weight:var(--deframe-widget-font-weight-semibold)] [line-height:1.1]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-tertiary)]',\n 'text-right',\n 'flex items-center'\n )}\n >\n <LoadingDots />\n </span>\n )\n : (\n <span\n data-test-id='swap-to-simple-output-amount'\n className={twMerge(\n 'text-[36px] [font-weight:var(--deframe-widget-font-weight-semibold)] [line-height:1.1]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-right w-full',\n isEmpty\n ? 'text-[color:var(--deframe-widget-color-text-tertiary)]'\n : 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n >\n {isEmpty ? '0' : outputAmount}\n </span>\n )}\n <span\n data-test-id='swap-to-simple-output-usd'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n {isOutputUsdLoading ? <LoadingDots /> : outputUsdFormatted}\n </span>\n </div>\n </div>\n\n {/* Balance row — hidden when no token selected */}\n {selectedToken && (\n <div\n data-test-id='swap-to-simple-balance-row'\n className='flex items-center justify-between mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <span\n data-test-id='swap-to-simple-balance'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n {labels.balanceLabel}:{' '}\n <span\n data-test-id='swap-to-simple-balance-value'\n className='text-[color:var(--deframe-widget-color-text-secondary)]'\n >\n {balanceFormatted}\n </span>\n </span>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport type { ConfirmSwapButtonViewProps } from './ConfirmSwapButtonView'\n\nexport type { ConfirmSwapButtonViewProps }\n\n// ── Inline Spinner ───────────────────────────────────────────────────────────\n\nfunction Spinner () {\n return (\n <svg\n data-test-id='confirm-swap-button-simple-spinner'\n width='18'\n height='18'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n className='animate-spin'\n aria-hidden='true'\n >\n <circle cx='12' cy='12' r='10' opacity='0.3' />\n <path d='M12 2 A10 10 0 0 1 22 12' />\n </svg>\n )\n}\n\n// ── ConfirmSwapButtonViewSimple ──────────────────────────────────────────────\n\nexport const ConfirmSwapButtonViewSimple: React.FC<ConfirmSwapButtonViewProps> = ({\n buttonLabel,\n disabled,\n isLoading,\n onClick,\n}) => {\n const isDisabled = disabled || isLoading\n\n const buttonClasses = twMerge(\n 'w-full h-12',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border-none',\n 'text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'transition-[background,color] duration-200',\n 'flex items-center justify-center gap-[var(--deframe-widget-size-gap-sm)]',\n isDisabled\n ? 'bg-[var(--deframe-widget-color-brand-primary-disabled)] text-[color:var(--deframe-widget-color-text-primary-disabled)] cursor-not-allowed'\n : 'bg-[var(--deframe-widget-color-brand-primary)] text-[color:var(--deframe-widget-color-text-primary-dark)] cursor-pointer'\n )\n\n return (\n <div data-test-id='confirm-swap-button-simple-wrapper'>\n <button\n data-test-id='confirm-swap-button-simple'\n onClick={!isDisabled ? onClick : undefined}\n disabled={isDisabled}\n aria-label={buttonLabel}\n className={buttonClasses}\n >\n {isLoading ? <Spinner /> : buttonLabel}\n </button>\n </div>\n )\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { motion } from 'framer-motion'\nimport type { SwapFormViewProps } from './SwapFormView'\nimport { SwapFromCardViewSimple } from '../swap-from-card-view/SwapFromCardViewSimple'\nimport { SwapToCardViewSimple } from '../swap-to-card-view/SwapToCardViewSimple'\nimport { ConfirmSwapButtonViewSimple } from '../confirm-swap-button-view/ConfirmSwapButtonViewSimple'\nimport { SWAP_SIMPLE_MIN_HEIGHT, SWAP_SIMPLE_WIDTH } from './constants'\n\nexport type { SwapFormViewProps }\n\n// ── SwapFormViewSimple ──────────────────────────────────────────────────────\n\nexport const SwapFormViewSimple: React.FC<SwapFormViewProps> = ({\n onSubmit,\n formRef,\n labels,\n onHistoryClick,\n onSwitchTokens,\n switchTokensAriaLabel,\n fromCard,\n toCard,\n advancedSettings,\n transactionDetails,\n confirmButton,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [panelPos, setPanelPos] = useState<{ top: number; left: number } | null>(null)\n const [showPanel, setShowPanel] = useState(false)\n\n // Sync: if the parent closes the panel externally, reset the local gate\n useEffect(() => {\n if (!advancedSettings.isOpen) setShowPanel(false)\n }, [advancedSettings.isOpen])\n\n const updatePanelPos = useCallback(() => {\n if (containerRef.current && showPanel) {\n const rect = containerRef.current.getBoundingClientRect()\n setPanelPos({ top: rect.top, left: rect.right + 16 })\n }\n }, [showPanel])\n\n useEffect(() => {\n if (!showPanel) {\n setPanelPos(null)\n return\n }\n updatePanelPos()\n window.addEventListener('scroll', updatePanelPos, true)\n window.addEventListener('resize', updatePanelPos)\n return () => {\n window.removeEventListener('scroll', updatePanelPos, true)\n window.removeEventListener('resize', updatePanelPos)\n }\n }, [showPanel, updatePanelPos])\n\n return (\n <div\n ref={containerRef}\n data-test-id='swap-form-view-simple'\n className={twMerge(\n 'relative',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n 'flex flex-col',\n `w-[${SWAP_SIMPLE_WIDTH}px] max-w-[calc(100%-32px)] shrink-0 box-border`,\n 'font-[var(--deframe-widget-font-family)]'\n )}\n style={{ minHeight: SWAP_SIMPLE_MIN_HEIGHT }}\n >\n <form ref={formRef} onSubmit={onSubmit} data-test-id='swap-form-simple-form' className='flex flex-col flex-1'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)]'>\n {/* ── Top row: history button only (no title/subtitle) ── */}\n <div\n data-test-id='swap-form-simple-top-row'\n className='flex items-center justify-end mb-[var(--deframe-widget-size-gap-sm)]'\n >\n <HistoryButton onClick={onHistoryClick} ariaLabel={labels.historyAriaLabel} />\n </div>\n\n {/* ── From card ── */}\n <SwapFromCardViewSimple\n {...fromCard}\n onNetworkAndAssetClick={fromCard.onNetworkAndAssetClick\n ? () => {\n setShowPanel(false)\n fromCard.onNetworkAndAssetClick!()\n }\n : undefined}\n percentageOptions={advancedSettings.percentageOptions}\n onPercentageClick={(pct) => advancedSettings.onPercentageClick(pct)}\n maxLabel={advancedSettings.maxLabel}\n />\n\n {/* ── Swap direction button (overlaps both cards) ── */}\n <div\n data-test-id='swap-form-simple-direction-row'\n className='flex justify-center relative -my-[16px] z-[1]'\n >\n <SwapDirectionButton\n onClick={onSwitchTokens}\n ariaLabel={switchTokensAriaLabel}\n />\n </div>\n\n {/* ── To card ── */}\n <SwapToCardViewSimple\n {...toCard}\n onNetworkAndAssetClick={toCard.onNetworkAndAssetClick\n ? () => {\n setShowPanel(false)\n toCard.onNetworkAndAssetClick!()\n }\n : undefined}\n />\n\n {/* ── Advanced pill ── */}\n <div\n data-test-id='swap-form-simple-advanced-wrapper'\n className='flex justify-end mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <AdvancedPill\n label='Avançado'\n isOpen={showPanel}\n onClick={() => {\n const next = !showPanel\n setShowPanel(next)\n advancedSettings.onOpenChange(next)\n }}\n />\n </div>\n\n </div>\n\n {/* ── Spacer pushes button to bottom ── */}\n <div className='flex-1' />\n\n {/* ── Submit button ── */}\n <div className='mt-[var(--deframe-widget-size-gap-sm)]'>\n <ConfirmSwapButtonViewSimple {...confirmButton} />\n </div>\n </form>\n\n {/* ── Advanced panel — fixed, top-right of container ── */}\n {showPanel && panelPos && (\n <div\n data-test-id='swap-form-simple-advanced-panel'\n className={twMerge(\n 'fixed',\n 'w-[320px] z-[9999]',\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'shadow-[0px_4px_24px_0px_#0000003D]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n style={{ top: panelPos.top, left: panelPos.left }}\n >\n <AdvancedPanelContent\n advancedSettings={{\n ...advancedSettings,\n onOpenChange: (open: boolean) => {\n setShowPanel(open)\n advancedSettings.onOpenChange(open)\n },\n }}\n transactionDetails={transactionDetails}\n />\n </div>\n )}\n </div>\n )\n}\n\n// ── HistoryButton ───────────────────────────────────────────────────────────\n\ninterface HistoryButtonProps {\n onClick: () => void\n ariaLabel: string\n}\n\nfunction HistoryButton ({ onClick, ariaLabel }: HistoryButtonProps) {\n return (\n <button\n data-test-id='swap-form-simple-history-button'\n type='button'\n onClick={onClick}\n aria-label={ariaLabel}\n className={twMerge(\n 'inline-flex items-center justify-center',\n 'w-9 h-9',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border-none',\n 'cursor-pointer',\n 'bg-transparent',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]',\n 'transition-[background] duration-150',\n 'flex-shrink-0',\n 'outline-none',\n 'text-[color:var(--deframe-widget-color-text-secondary)]'\n )}\n >\n <svg\n data-test-id='swap-form-simple-history-icon'\n viewBox='0 0 24 24'\n width='20'\n height='20'\n fill='none'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden='true'\n >\n <circle cx='12' cy='12' r='10' />\n <polyline points='12 6 12 12 16 14' />\n </svg>\n </button>\n )\n}\n\n// ── SwapDirectionButton ─────────────────────────────────────────────────────\n\ninterface SwapDirectionButtonProps {\n onClick: () => void\n ariaLabel: string\n}\n\nfunction SwapDirectionButton ({ onClick, ariaLabel }: SwapDirectionButtonProps) {\n const [isHovered, setIsHovered] = useState(false)\n\n return (\n <motion.button\n data-test-id='swap-form-simple-direction-button'\n type='button'\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n animate={{ rotate: isHovered ? 180 : 0 }}\n transition={{ duration: 0.25, ease: 'easeInOut' }}\n aria-label={ariaLabel}\n className={twMerge(\n 'inline-flex items-center justify-center',\n 'w-10 h-10',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[#12151c]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'outline-none',\n 'flex-shrink-0',\n 'shadow-[0px_2px_8px_0px_#0000003D]',\n 'cursor-pointer text-[color:var(--deframe-widget-color-brand-primary)]'\n )}\n >\n <svg\n data-test-id='swap-form-simple-direction-icon'\n width='18'\n height='18'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden='true'\n >\n <line x1='12' y1='5' x2='12' y2='19' />\n <polyline points='19 12 12 19 5 12' />\n </svg>\n </motion.button>\n )\n}\n\n// ── AdvancedPill ────────────────────────────────────────────────────────────\n\ninterface AdvancedPillProps {\n label: string\n isOpen: boolean\n onClick: () => void\n}\n\nfunction AdvancedPill ({ label, isOpen, onClick }: AdvancedPillProps) {\n return (\n <button\n data-test-id='swap-form-simple-advanced-pill'\n type='button'\n onClick={onClick}\n className={twMerge(\n 'inline-flex items-center gap-[5px]',\n 'py-[5px] px-[var(--deframe-widget-size-padding-x-sm)]',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n isOpen\n ? 'border border-[color:var(--deframe-widget-color-brand-primary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]'\n : 'border border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] bg-transparent',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]',\n 'cursor-pointer',\n 'text-[color:var(--deframe-widget-color-brand-primary)]',\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)]',\n 'outline-none',\n 'font-[inherit]',\n 'transition-[background] duration-150',\n 'flex-shrink-0'\n )}\n >\n <svg\n data-test-id='swap-form-simple-advanced-pill-icon'\n width='13'\n height='13'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden='true'\n >\n <line x1='4' y1='6' x2='20' y2='6' />\n <line x1='4' y1='12' x2='20' y2='12' />\n <line x1='4' y1='18' x2='20' y2='18' />\n <circle cx='8' cy='6' r='2' fill='currentColor' stroke='none' />\n <circle cx='16' cy='12' r='2' fill='currentColor' stroke='none' />\n <circle cx='10' cy='18' r='2' fill='currentColor' stroke='none' />\n </svg>\n <span data-test-id='swap-form-simple-advanced-pill-label'>\n {label}\n </span>\n </button>\n )\n}\n\n// ── AdvancedPanelContent ────────────────────────────────────────────────────\n\ninterface AdvancedPanelContentProps {\n advancedSettings: SwapFormViewProps['advancedSettings']\n transactionDetails: SwapFormViewProps['transactionDetails']\n}\n\nfunction AdvancedPanelContent ({ advancedSettings, transactionDetails }: AdvancedPanelContentProps) {\n return (\n <div\n data-test-id='swap-form-simple-advanced-panel-content'\n className='px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'\n >\n {/* ── Header ── */}\n <div\n data-test-id='swap-form-simple-advanced-panel-header'\n className='flex justify-between items-center mb-[6px]'\n >\n <span\n data-test-id='swap-form-simple-advanced-panel-title'\n className='text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] font-[inherit]'\n >\n Avançado\n </span>\n <button\n data-test-id='swap-form-simple-advanced-panel-close'\n type='button'\n onClick={() => advancedSettings.onOpenChange(false)}\n aria-label='Close advanced panel'\n className={twMerge(\n 'inline-flex items-center justify-center',\n 'w-7 h-7',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border-none cursor-pointer bg-transparent',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]',\n 'transition-[background] duration-150',\n 'flex-shrink-0 outline-none',\n 'text-[color:var(--deframe-widget-color-text-secondary)]'\n )}\n >\n <svg\n data-test-id='swap-form-simple-advanced-panel-close-icon'\n viewBox='0 0 24 24'\n width='16'\n height='16'\n fill='currentColor'\n aria-hidden='true'\n >\n <path d='M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z' />\n </svg>\n </button>\n </div>\n\n {/* ── Exchange rate subtitle ── */}\n {transactionDetails.exchangeRateFormatted && (\n <p\n data-test-id='swap-form-simple-advanced-panel-subtitle'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] m-0 mb-[var(--deframe-widget-size-gap-sm)] leading-[1.4] font-[inherit]'\n >\n {transactionDetails.exchangeRateFormatted}\n </p>\n )}\n\n {/* ── Divider ── */}\n <div\n data-test-id='swap-form-simple-advanced-panel-divider'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)] mt-[var(--deframe-widget-size-gap-sm)]'\n />\n\n {/* ── Detail rows (from transactionDetails) ── */}\n <DetailRow label={transactionDetails.labels.exchangeRateLabel} value={transactionDetails.exchangeRateFormatted} />\n <DetailRow label={transactionDetails.labels.blockchainCostsLabel} value={transactionDetails.totalCostFormatted} />\n <DetailRow label={transactionDetails.labels.networkGasLabel} value={transactionDetails.gasCostFormatted} />\n <DetailRow label={transactionDetails.labels.protocolFeeLabel} value={transactionDetails.protocolFee} />\n <DetailRow label={transactionDetails.labels.slippageLabel} value={transactionDetails.slippageFormatted} />\n <DetailRow label={transactionDetails.labels.etaLabel} value={transactionDetails.etaFormatted} />\n {transactionDetails.quoteId && (\n <DetailRow label={transactionDetails.labels.quoteIdLabel} value={transactionDetails.quoteId} />\n )}\n\n {/* ── Divider before slippage controls ── */}\n <div\n data-test-id='swap-form-simple-advanced-panel-divider-2'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)] my-[var(--deframe-widget-size-gap-sm)]'\n />\n\n {/* ── Slippage tolerance controls ── */}\n <div data-test-id='swap-form-simple-advanced-panel-slippage'>\n <span\n data-test-id='swap-form-simple-advanced-panel-slippage-label'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.07em] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n Slippage: {advancedSettings.slippageFormatted}\n </span>\n <div\n data-test-id='swap-form-simple-advanced-panel-slippage-buttons'\n className='flex gap-[6px] mt-[var(--deframe-widget-size-gap-sm)]'\n >\n {[10, 50, 100].map((bps) => {\n const isActive = advancedSettings.slippageBps === bps\n return (\n <button\n key={bps}\n data-test-id='swap-form-simple-slippage-btn'\n type='button'\n onClick={() => advancedSettings.onSlippageSelect(bps)}\n className={twMerge(\n 'py-[3px] px-[10px]',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n 'text-[12px] font-[var(--deframe-widget-font-family)]',\n 'border cursor-pointer outline-none',\n 'transition-all duration-150',\n isActive\n ? 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)] [font-weight:var(--deframe-widget-font-weight-semibold)]'\n : 'border-[color:var(--deframe-widget-color-border-secondary)] bg-transparent text-[color:var(--deframe-widget-color-text-secondary)] hover:border-[color:var(--deframe-widget-color-border-primary)]'\n )}\n >\n {advancedSettings.formatPercentage(bps)}\n </button>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n\n// ── DetailRow ───────────────────────────────────────────────────────────────\n\ninterface DetailRowProps {\n label: string\n value: string\n}\n\nfunction DetailRow ({ label, value }: DetailRowProps) {\n if (!label && !value) return null\n return (\n <div\n data-test-id='swap-form-simple-detail-row'\n className='flex justify-between items-center py-[10px] gap-[var(--deframe-widget-size-gap-sm)]'\n >\n <span\n data-test-id='swap-form-simple-detail-row-label'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.07em] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)] flex-shrink-0'\n >\n {label}\n </span>\n <span\n data-test-id='swap-form-simple-detail-row-value'\n className='text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-right font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'\n >\n {value}\n </span>\n </div>\n )\n}\n","import React, { useState, useEffect } from 'react'\nimport { ListItem, ListItemContent, ListItemLeftSide } from '../lists'\nimport { SearchInput } from '../search-input'\nimport { TextBody, TextHeading } from '../texts'\nimport { TertiaryButton } from '../buttons'\nimport { BackgroundContainer } from '../layout'\nimport type { ChooseANetworkLabels } from '../../types/choose-a-network-labels'\nimport type { ChainItem } from '../../types/chain-item'\n\nexport interface ChooseANetworkViewProps {\n labels: ChooseANetworkLabels\n autoFocus?: boolean\n chains: ChainItem[]\n pageSize?: number\n onChainClick: (chainId: number) => void\n}\n\nexport const ChooseANetworkView: React.FC<ChooseANetworkViewProps> = ({\n labels,\n autoFocus = true,\n chains,\n pageSize = 10,\n onChainClick,\n}) => {\n const [searchValue, setSearchValue] = useState('')\n const [page, setPage] = useState(1)\n\n useEffect(() => {\n setPage(1)\n }, [searchValue])\n\n const filteredChains = chains.filter((chain) =>\n chain.name.toLowerCase().includes(searchValue.toLowerCase())\n )\n\n const displayedChains = filteredChains.slice(0, page * pageSize)\n const hasMore = filteredChains.length > page * pageSize\n\n return (\n <BackgroundContainer className='flex flex-col h-full'>\n <div className='flex flex-col flex-1 w-full p-[var(--deframe-widget-size-padding-x-lg)] overflow-hidden'>\n <div className='flex-shrink-0'>\n <TextHeading>{labels.title}</TextHeading>\n <br />\n <SearchInput\n value={searchValue}\n onChange={setSearchValue}\n placeholder={labels.searchPlaceholder}\n autoFocus={autoFocus}\n />\n </div>\n <div\n data-testid='choose-a-network-list'\n className='flex flex-col gap-[var(--deframe-widget-size-gap-xs)] w-full mt-[var(--deframe-widget-size-gap-md)] overflow-y-auto flex-1 min-h-0'\n >\n {displayedChains.map((chain) => (\n <ListItem\n className='w-full flex-shrink-0'\n onClick={() => onChainClick(chain.chainId)}\n key={`chain-${chain.chainId}`}\n data-testid={`choose-network-item-${chain.chainId}`}\n data-chain-id={chain.chainId}\n >\n <ListItemLeftSide>\n <img\n src={chain.imageUrl}\n alt={chain.name}\n className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)]'\n />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{chain.name}</TextBody>\n </ListItemContent>\n </ListItem>\n ))}\n {hasMore && (\n <div className='flex justify-center items-center w-full py-[var(--deframe-widget-size-padding-y-md)] flex-shrink-0'>\n <TertiaryButton onClick={() => setPage(page + 1)}>\n {labels.loadMoreLabel}\n </TertiaryButton>\n </div>\n )}\n </div>\n </div>\n </BackgroundContainer>\n )\n}\n","import { useState, useEffect } from 'react'\n\nexport function useIsMobile (breakpoint = 640) {\n const [isMobile, setIsMobile] = useState(\n typeof window !== 'undefined' ? window.innerWidth < breakpoint : false\n )\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < breakpoint)\n check()\n window.addEventListener('resize', check)\n return () => window.removeEventListener('resize', check)\n }, [breakpoint])\n return isMobile\n}\n","interface CloseButtonInlineProps {\n onClick: () => void\n ariaLabel: string\n}\n\nexport function CloseButtonInline ({ onClick, ariaLabel }: CloseButtonInlineProps) {\n const baseClasses = [\n 'inline-flex items-center justify-center',\n 'w-9 h-9',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border-none',\n 'cursor-pointer',\n 'bg-transparent',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]',\n 'transition-[background] duration-150',\n 'flex-shrink-0',\n 'outline-none',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n ].join(' ')\n\n return (\n <button\n data-test-id='close-button'\n onClick={onClick}\n aria-label={ariaLabel}\n className={baseClasses}\n >\n <svg\n data-test-id='close-button-icon'\n viewBox='0 0 24 24'\n width='20'\n height='20'\n fill='currentColor'\n aria-hidden='true'\n >\n <path d='M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z' />\n </svg>\n </button>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface IconCircleProps {\n iconUrl?: string | null\n name: string\n size?: number\n className?: string\n}\n\nexport function IconCircle ({ iconUrl, name, size = 36, className }: IconCircleProps) {\n const [imgError, setImgError] = React.useState(false)\n\n if (iconUrl && !imgError) {\n return (\n <img\n data-test-id='icon-circle-img'\n src={iconUrl}\n alt={name}\n width={size}\n height={size}\n className={twMerge('rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 object-cover', className)}\n onError={() => setImgError(true)}\n />\n )\n }\n\n return (\n <div\n data-test-id='icon-circle-fallback'\n className={twMerge(\n 'rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 flex items-center justify-center',\n '[font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary-dark)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n className\n )}\n style={{\n width: size,\n height: size,\n fontSize: size * 0.33,\n letterSpacing: '-0.01em',\n }}\n >\n {name.slice(0, 2).toUpperCase()}\n </div>\n )\n}\n","/** Returns true if the formatted USD string represents >= $0.01 */\nexport function hasSignificantBalance (balanceUsd?: string): boolean {\n if (!balanceUsd) return false\n const num = parseFloat(balanceUsd.replace(/[^0-9.-]/g, ''))\n return !isNaN(num) && num >= 0.01\n}\n","import { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport type { NetworkOption } from '../../../types/network-option'\nimport { IconCircle } from './IconCircle'\nimport { hasSignificantBalance } from './hasSignificantBalance'\n\nexport interface NetworkRowProps {\n network: NetworkOption\n selected: boolean\n onClick: () => void\n onKeyDown: (e: React.KeyboardEvent) => void\n index: number\n}\n\nexport function NetworkRow ({ network, selected, onClick, onKeyDown, index }: NetworkRowProps) {\n const baseClasses = [\n 'relative flex items-center gap-[10px]',\n 'py-[9px] px-[var(--deframe-widget-size-padding-x-sm)] pl-[14px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'cursor-pointer',\n 'outline-none',\n 'mb-[var(--deframe-widget-size-gap-none)].5',\n 'transition-[background] duration-150',\n ].join(' ')\n\n const stateClasses = {\n selected: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]',\n default: 'bg-transparent hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]',\n } as const\n\n const rowClasses = twMerge(baseClasses, stateClasses[selected ? 'selected' : 'default'])\n\n const nameClasses = [\n 'text-[14px] [font-weight:var(--deframe-widget-font-weight-medium)]',\n selected ? 'text-[color:var(--deframe-widget-color-text-primary)]' : 'text-[color:var(--deframe-widget-color-text-secondary)]',\n ].join(' ')\n\n return (\n <motion.div\n data-test-id='network-row'\n role='option'\n aria-selected={selected}\n aria-label={network.name}\n tabIndex={0}\n onClick={onClick}\n onKeyDown={onKeyDown}\n data-chain-index={index}\n className={rowClasses}\n >\n {selected && (\n <motion.div\n data-test-id='network-row-accent'\n layoutId='chain-accent'\n className='absolute left-0 top-2 bottom-2 w-[3px] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-brand-primary)]'\n transition={{ type: 'spring', stiffness: 400, damping: 30 }}\n />\n )}\n <IconCircle\n iconUrl={network.iconUrl}\n name={network.name}\n size={34}\n />\n <div\n data-test-id='network-row-content'\n className='flex-1 min-w-0'\n >\n <div\n data-test-id='network-row-name'\n className={nameClasses}\n >\n {network.name}\n </div>\n {hasSignificantBalance(network.balanceUsd) && (\n <div\n data-test-id='network-row-balance'\n className='text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)] mt-px'\n >\n {network.balanceUsd}\n </div>\n )}\n </div>\n </motion.div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { NetworkOption } from '../../../types/network-option'\nimport { IconCircle } from './IconCircle'\nimport { hasSignificantBalance } from './hasSignificantBalance'\n\nexport interface NetworkChipProps {\n network: NetworkOption\n selected: boolean\n onClick: () => void\n}\n\nexport function NetworkChip ({ network, selected, onClick }: NetworkChipProps) {\n const baseClasses = [\n 'inline-flex items-center gap-[var(--deframe-widget-size-gap-sm)]',\n 'py-[var(--deframe-widget-size-padding-y-sm)] pl-[var(--deframe-widget-size-padding-x-sm)] pr-[14px]',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n 'cursor-pointer',\n 'whitespace-nowrap',\n 'transition-all duration-150',\n 'flex-shrink-0',\n 'outline-none',\n 'border',\n ].join(' ')\n\n const stateClasses = {\n selected: 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]',\n default: 'border-[color:var(--deframe-widget-color-border-secondary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]',\n } as const\n\n const buttonClasses = twMerge(baseClasses, stateClasses[selected ? 'selected' : 'default'])\n\n const nameLabelClasses = [\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)] leading-[1.2]',\n selected ? 'text-[color:var(--deframe-widget-color-brand-primary)]' : 'text-[color:var(--deframe-widget-color-text-secondary)]',\n ].join(' ')\n\n return (\n <button\n data-test-id='network-chip'\n onClick={onClick}\n aria-label={network.name}\n className={buttonClasses}\n >\n <IconCircle\n iconUrl={network.iconUrl}\n name={network.name}\n size={24}\n />\n <div\n data-test-id='network-chip-content'\n className='text-left'\n >\n <div\n data-test-id='network-chip-label'\n className={nameLabelClasses}\n >\n {network.name}\n </div>\n {hasSignificantBalance(network.balanceUsd) && (\n <div\n data-test-id='network-chip-balance'\n className='text-[11px] text-[color:var(--deframe-widget-color-text-tertiary)] leading-[1.4]'\n >\n {network.balanceUsd}\n </div>\n )}\n </div>\n </button>\n )\n}\n","import * as React from 'react'\n\ninterface SearchInputInlineProps {\n value: string\n onChange: (value: string) => void\n placeholder: string\n onArrowDown?: () => void\n autoFocus?: boolean\n}\n\nexport const SearchInputInline = React.forwardRef<HTMLInputElement, SearchInputInlineProps>(\n ({ value, onChange, placeholder, onArrowDown, autoFocus }, ref) => {\n const inputClasses = [\n 'w-full box-border h-10',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'py-[var(--deframe-widget-size-padding-y-none)] pr-[var(--deframe-widget-size-padding-x-xl)] pl-[14px]',\n 'text-[14px] text-[color:var(--deframe-widget-color-text-primary)]',\n 'outline-none focus:outline-none',\n 'focus:border-[color:var(--deframe-widget-color-brand-primary)]',\n 'transition-colors duration-150',\n 'font-[var(--deframe-widget-font-family)]',\n 'placeholder:text-[color:var(--deframe-widget-color-text-tertiary)]',\n ].join(' ')\n\n return (\n <div\n data-test-id='search-input-wrapper'\n className='relative'\n >\n <input\n data-test-id='search-input'\n ref={ref}\n type='text'\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n aria-label={placeholder}\n autoFocus={autoFocus}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n onArrowDown?.()\n }\n }}\n className={inputClasses}\n />\n <div\n data-test-id='search-input-icon'\n className='absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-[color:var(--deframe-widget-color-text-tertiary)]'\n >\n <svg\n width='15'\n height='15'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n aria-hidden='true'\n >\n <circle cx='11' cy='11' r='8' />\n <line x1='21' y1='21' x2='16.65' y2='16.65' />\n </svg>\n </div>\n </div>\n )\n }\n)\nSearchInputInline.displayName = 'SearchInputInline'\n","import { twMerge } from 'tailwind-merge'\nimport type { TokenData } from '../../../types/token-data'\nimport type { BalanceDomain } from '../../../types/balance-domain'\nimport { IconCircle } from './IconCircle'\n\nexport interface AssetRowInlineProps {\n token: TokenData\n balance: BalanceDomain | undefined\n formatTokenAmount: (amountUI: string, priceUSD: number, decimals: number) => string\n formatCurrencyValue: (value: number) => string\n onClick: () => void\n onKeyDown: (e: React.KeyboardEvent) => void\n index: number\n}\n\nexport function AssetRowInline ({\n token, balance, formatTokenAmount, formatCurrencyValue,\n onClick, onKeyDown, index,\n}: AssetRowInlineProps) {\n const hasBalance = !!balance && parseFloat(balance.amountInUSD) >= 0.01\n\n const formattedAmount = balance\n ? formatTokenAmount(balance.amountUI, token.priceInUSD ?? 0, token.decimals)\n : undefined\n\n const formattedUsd = balance\n ? formatCurrencyValue(parseFloat(balance.amountInUSD))\n : undefined\n\n const baseClasses = [\n 'group',\n 'relative flex items-center gap-[var(--deframe-widget-size-gap-sm)]',\n 'py-[10px] px-[14px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'cursor-pointer outline-none',\n 'transition-[background] duration-150',\n ].join(' ')\n\n const rowClasses = twMerge(baseClasses, 'bg-transparent hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]')\n\n return (\n <div\n data-test-id='asset-row'\n role='option'\n aria-selected={false}\n aria-label={`${token.name} ${token.symbol}`}\n tabIndex={0}\n onClick={onClick}\n onKeyDown={onKeyDown}\n data-asset-index={index}\n className={rowClasses}\n >\n <IconCircle\n iconUrl={token.logoURI}\n name={token.name}\n size={38}\n />\n <div\n data-test-id='asset-row-content'\n className='flex-1 min-w-0'\n >\n <div\n data-test-id='asset-row-symbol'\n className='text-[14px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)]'\n >\n {token.symbol}\n </div>\n <div\n data-test-id='asset-row-name'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] mt-px'\n >\n {token.name}\n </div>\n </div>\n {hasBalance\n ? (\n <div\n data-test-id='asset-row-balance'\n className='flex-shrink-0 text-right'\n >\n {formattedAmount && (\n <div\n data-test-id='asset-row-balance-amount'\n className='text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-primary)]'\n >\n {formattedAmount}{' '}\n <span\n data-test-id='asset-row-balance-symbol'\n className='text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)] [font-weight:var(--deframe-widget-font-weight-regular)]'\n >\n {token.symbol}\n </span>\n </div>\n )}\n {formattedUsd && (\n <div\n data-test-id='asset-row-balance-usd'\n className='text-[12px] text-[color:var(--deframe-widget-color-text-secondary)] mt-[var(--deframe-widget-size-gap-none)].5'\n >\n {formattedUsd}\n </div>\n )}\n </div>\n )\n : <></>}\n </div>\n )\n}\n","export function TokensLoadingState ({ label }: { label: string }) {\n return (\n <div\n data-test-id='tokens-loading-state'\n className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)] px-[14px] py-[var(--deframe-widget-size-padding-y-sm)]'\n >\n {Array.from({ length: 5 }).map((_, i) => (\n <div\n key={i}\n data-test-id={`tokens-loading-skeleton-${i}`}\n className='flex items-center gap-[var(--deframe-widget-size-gap-sm)] animate-pulse'\n >\n <div className='w-[38px] h-[38px] rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex-shrink-0' />\n <div className='flex-1 min-w-0 flex flex-col gap-[6px]'>\n <div className='h-[14px] w-[60%] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-bg-tertiary)]' />\n <div className='h-[12px] w-[40%] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-bg-tertiary)]' />\n </div>\n <div className='flex-shrink-0 flex flex-col items-end gap-[6px]'>\n <div className='h-[13px] w-[50px] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-bg-tertiary)]' />\n <div className='h-[12px] w-[36px] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-bg-tertiary)]' />\n </div>\n </div>\n ))}\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport type { TokenData } from '../../../types/token-data'\nimport type { BalanceDomain } from '../../../types/balance-domain'\nimport type { ChooseNetworkAndAssetLabels } from './ChooseNetworkAndAssetViewSimple'\nimport { SearchInputInline } from './SearchInputInline'\nimport { AssetRowInline } from './AssetRowInline'\nimport { TokensLoadingState } from './TokensLoadingState'\n\nexport interface AssetSearchAndListProps {\n query: string\n setQuery: (q: string) => void\n searchRef: React.RefObject<HTMLInputElement | null>\n assetListRef: React.RefObject<HTMLDivElement | null>\n displayedTokens: TokenData[]\n findBalance: (token: TokenData) => BalanceDomain | undefined\n formatTokenAmount: (amountUI: string, priceUSD: number, decimals: number) => string\n formatCurrencyValue: (value: number) => string\n isMobile: boolean\n onAssetClick: (token: TokenData) => void\n handleAssetKeyDown: (e: React.KeyboardEvent, token: TokenData, idx: number) => void\n isFetching: boolean\n hasMore: boolean\n onLoadMore: () => void\n labels: ChooseNetworkAndAssetLabels\n autoFocus?: boolean\n}\n\nexport function AssetSearchAndList ({\n query, setQuery, searchRef, assetListRef, displayedTokens,\n findBalance, formatTokenAmount, formatCurrencyValue,\n isMobile, onAssetClick, handleAssetKeyDown,\n isFetching, hasMore, onLoadMore, labels, autoFocus,\n}: AssetSearchAndListProps) {\n return (\n <div\n data-test-id='search-and-assets'\n className='flex flex-col flex-1 overflow-hidden'\n >\n {/* Search input */}\n <div\n data-test-id='search-wrapper'\n className={twMerge(\n 'px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)] flex-shrink-0',\n isMobile\n ? 'pt-[var(--deframe-widget-size-padding-y-none)]'\n : 'pt-[var(--deframe-widget-size-padding-y-sm)]'\n )}\n >\n <SearchInputInline\n ref={searchRef}\n value={query}\n onChange={setQuery}\n placeholder={labels.searchPlaceholder}\n autoFocus={autoFocus}\n onArrowDown={() => {\n assetListRef.current?.querySelector<HTMLElement>(\"[data-asset-index='0']\")?.focus()\n }}\n />\n </div>\n\n {/* Section label */}\n <div\n data-test-id='section-label'\n className='px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-xs)] flex-shrink-0 text-[11px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-tertiary)] tracking-[0.06em] uppercase'\n >\n {labels.assetsLabel}\n </div>\n\n {/* Asset list */}\n <div\n ref={assetListRef}\n role='listbox'\n aria-label={labels.assetsLabel}\n data-test-id='asset-list'\n className='flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-sm)] pb-[var(--deframe-widget-size-padding-y-sm)] pt-[var(--deframe-widget-size-padding-y-xs)]'\n >\n {isFetching\n ? (\n <TokensLoadingState label={labels.searchingText} />\n )\n : displayedTokens.length === 0\n ? (\n <div\n data-test-id='no-results'\n className='py-[var(--deframe-widget-size-padding-y-xl)] px-[var(--deframe-widget-size-padding-x-md)] text-center'\n >\n <div\n data-test-id='no-results-title'\n className='text-[14px] text-[color:var(--deframe-widget-color-text-secondary)] mb-[var(--deframe-widget-size-gap-xs)]'\n >\n {labels.searchEmptyTitle}\n </div>\n <div\n data-test-id='no-results-description'\n className='text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)]'\n >\n {labels.searchEmptyDescription}\n </div>\n </div>\n )\n : (\n <>\n {displayedTokens.map((token, i) => (\n <AssetRowInline\n key={`${token.chainId}-${token.address}-${i}`}\n token={token}\n balance={findBalance(token)}\n formatTokenAmount={formatTokenAmount}\n formatCurrencyValue={formatCurrencyValue}\n onClick={() => onAssetClick(token)}\n onKeyDown={(e) => handleAssetKeyDown(e, token, i)}\n index={i}\n />\n ))}\n {hasMore && (\n <div\n data-test-id='load-more-wrapper'\n className='flex justify-center py-[var(--deframe-widget-size-padding-y-sm)]'\n >\n <button\n data-test-id='load-more-button'\n aria-label={labels.loadMoreButton}\n onClick={onLoadMore}\n className={[\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)]',\n 'text-[color:var(--deframe-widget-color-brand-primary)]',\n 'bg-transparent border-none cursor-pointer outline-none',\n 'hover:underline',\n 'font-[var(--deframe-widget-font-family)]',\n ].join(' ')}\n >\n {labels.loadMoreButton}\n </button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport type { TokenData } from '../../../types/token-data'\nimport type { NetworkOption } from '../../../types/network-option'\nimport type { BalanceDomain } from '../../../types/balance-domain'\nimport { useIsMobile } from '../../../utils/useIsMobile'\nimport { CloseButtonInline } from './CloseButtonInline'\nimport { NetworkRow } from './NetworkRow'\nimport { NetworkChip } from './NetworkChip'\nimport { AssetSearchAndList } from './AssetSearchAndList'\n\n// ── Labels ──────────────────────────────────────────────────────────────────\n\nexport interface ChooseNetworkAndAssetLabels {\n title: string\n searchPlaceholder: string\n searchingText: string\n loadMoreButton: string\n searchEmptyTitle: string\n searchEmptyDescription: string\n networksLabel: string\n assetsLabel: string\n closeAriaLabel: string\n}\n\n// ── Props ───────────────────────────────────────────────────────────────────\n\nexport interface ChooseNetworkAndAssetViewSimpleProps {\n isOpen: boolean\n onClose: () => void\n networks: NetworkOption[]\n selectedNetwork?: NetworkOption | null\n onNetworkSelect: (network: NetworkOption) => void\n displayedTokens: TokenData[]\n findBalance: (token: TokenData) => BalanceDomain | undefined\n formatTokenAmount: (amountUI: string, priceUSD: number, decimals: number) => string\n formatCurrencyValue: (value: number) => string\n onAssetClick: (token: TokenData) => void\n onSearch: (value: string) => void\n autoFocus?: boolean\n hasMore: boolean\n onLoadMore: () => void\n isFetching: boolean\n labels: ChooseNetworkAndAssetLabels\n}\n\n// ── Main Component ──────────────────────────────────────────────────────────\n\nexport function ChooseNetworkAndAssetViewSimple ({\n isOpen,\n onClose,\n networks,\n selectedNetwork,\n onNetworkSelect,\n displayedTokens,\n findBalance,\n formatTokenAmount,\n formatCurrencyValue,\n onAssetClick,\n onSearch,\n autoFocus,\n hasMore,\n onLoadMore,\n isFetching,\n labels,\n}: ChooseNetworkAndAssetViewSimpleProps) {\n const [query, setQuery] = React.useState('')\n const searchRef = React.useRef<HTMLInputElement>(null)\n const chainListRef = React.useRef<HTMLDivElement>(null)\n const assetListRef = React.useRef<HTMLDivElement>(null)\n const isMobile = useIsMobile()\n\n // Resolve the active network\n const activeNetwork = selectedNetwork ?? networks[0] ?? null\n\n // Propagate search to host\n const handleQueryChange = React.useCallback((q: string) => {\n setQuery(q)\n onSearch(q)\n }, [onSearch])\n\n // Network selection: reset search, notify host\n const handleNetworkSelect = React.useCallback((network: NetworkOption) => {\n setQuery('')\n onSearch('')\n onNetworkSelect(network)\n searchRef.current?.focus()\n }, [onSearch, onNetworkSelect])\n\n // Escape closes modal\n React.useEffect(() => {\n if (!isOpen) return\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose() }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [isOpen, onClose])\n\n // Auto-focus search input on open\n React.useEffect(() => {\n if (isOpen && autoFocus) {\n const id = requestAnimationFrame(() => searchRef.current?.focus())\n return () => cancelAnimationFrame(id)\n }\n }, [isOpen, autoFocus])\n\n // Keyboard: chain navigation\n const handleChainKeyDown = React.useCallback((e: React.KeyboardEvent, network: NetworkOption, idx: number) => {\n if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); handleNetworkSelect(network) }\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n chainListRef.current?.querySelector<HTMLElement>(`[data-chain-index=\"${idx + 1}\"]`)?.focus()\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n chainListRef.current?.querySelector<HTMLElement>(`[data-chain-index=\"${idx - 1}\"]`)?.focus()\n }\n }, [handleNetworkSelect])\n\n // Keyboard: asset navigation\n const handleAssetKeyDown = React.useCallback((e: React.KeyboardEvent, token: TokenData, idx: number) => {\n if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onAssetClick(token) }\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n assetListRef.current?.querySelector<HTMLElement>(`[data-asset-index=\"${idx + 1}\"]`)?.focus()\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n if (idx === 0) { searchRef.current?.focus(); return }\n assetListRef.current?.querySelector<HTMLElement>(`[data-asset-index=\"${idx - 1}\"]`)?.focus()\n }\n }, [onAssetClick])\n\n const content = isOpen ? renderContent() : null\n\n return <AnimatePresence>{content}</AnimatePresence>\n\n // ── Render content ──────────────────────────────────────────────────────\n function renderContent () {\n const sharedSearchAssets = (\n <AssetSearchAndList\n query={query}\n setQuery={handleQueryChange}\n searchRef={searchRef}\n assetListRef={assetListRef}\n displayedTokens={displayedTokens}\n findBalance={findBalance}\n formatTokenAmount={formatTokenAmount}\n formatCurrencyValue={formatCurrencyValue}\n isMobile={isMobile}\n onAssetClick={onAssetClick}\n handleAssetKeyDown={handleAssetKeyDown}\n isFetching={isFetching}\n hasMore={hasMore}\n onLoadMore={onLoadMore}\n labels={labels}\n autoFocus={autoFocus}\n />\n )\n\n // ── Mobile: Action Sheet ────────────────────────────────────────────────\n if (isMobile) {\n return (\n <motion.div\n key='mobile'\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={onClose}\n data-test-id='backdrop'\n className='fixed inset-0 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)] backdrop-blur-[4px] z-50 flex flex-col justify-end'\n >\n <motion.div\n role='dialog'\n aria-modal='true'\n aria-label={labels.title}\n initial={{ y: '100%' }}\n animate={{ y: 0 }}\n exit={{ y: '100%' }}\n transition={{ type: 'spring', stiffness: 320, damping: 32, mass: 0.8 }}\n onClick={(e) => e.stopPropagation()}\n data-test-id='sheet'\n className={[\n 'bg-[var(--deframe-widget-color-bg-secondary)] flex flex-col overflow-hidden',\n 'rounded-t-[var(--deframe-widget-size-radius-lg)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)] border-b-0',\n 'shadow-[0px_4px_16px_0px_#00000066,0px_24px_80px_0px_#00000099]',\n 'max-h-[88vh]',\n ].join(' ')}\n >\n {/* Drag handle */}\n <div\n data-test-id='drag-handle'\n className='flex justify-center pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-xs)].5 flex-shrink-0'\n >\n <div className='w-9 h-1 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-border-primary)]' />\n </div>\n\n {/* Header */}\n <div\n data-test-id='sheet-header'\n className='flex items-center justify-between pt-[var(--deframe-widget-size-padding-y-xs)].5 pr-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)].5 pl-[var(--deframe-widget-size-padding-x-md)] flex-shrink-0'\n >\n <span\n data-test-id='sheet-title'\n className='text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] font-[var(--deframe-widget-font-family)]'\n >\n {labels.title}\n </span>\n <CloseButtonInline onClick={onClose} ariaLabel={labels.closeAriaLabel} />\n </div>\n\n {/* Network chips section */}\n <div\n data-test-id='network-section'\n className='flex-shrink-0 pb-[var(--deframe-widget-size-padding-y-sm)].5'\n >\n <div\n data-test-id='network-section-label'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-tertiary)] tracking-[0.06em] uppercase px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)]'\n >\n {labels.networksLabel}\n </div>\n <div\n ref={chainListRef}\n role='listbox'\n aria-label={labels.networksLabel}\n data-test-id='network-chip-list'\n className='flex gap-[var(--deframe-widget-size-gap-sm)] overflow-x-auto px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-xs)] [scrollbar-width:none]'\n >\n {networks.map((network) => (\n <NetworkChip\n key={network.chainId}\n network={network}\n selected={activeNetwork?.chainId === network.chainId}\n onClick={() => handleNetworkSelect(network)}\n />\n ))}\n </div>\n </div>\n\n {/* Divider */}\n <div\n data-test-id='divider'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0'\n />\n\n {/* Body */}\n <div\n data-test-id='sheet-body'\n className='flex-1 flex flex-col overflow-hidden pt-[var(--deframe-widget-size-padding-y-xs)]'\n >\n {sharedSearchAssets}\n </div>\n </motion.div>\n </motion.div>\n )\n }\n\n // ── Desktop: Centered Modal ─────────────────────────────────────────────\n return (\n <motion.div\n key='desktop'\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={onClose}\n data-test-id='backdrop'\n className='fixed inset-0 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)] backdrop-blur-[4px] z-50 flex items-center justify-center px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'\n >\n <motion.div\n role='dialog'\n aria-modal='true'\n aria-label={labels.title}\n initial={{ opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.96 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n onClick={(e) => e.stopPropagation()}\n data-test-id='modal'\n className={[\n 'w-[min(680px,calc(100vw-32px))]',\n 'h-[min(620px,calc(100vh-64px))]',\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'shadow-[0px_4px_16px_0px_#00000066,0px_24px_80px_0px_#00000099]',\n 'flex flex-col overflow-hidden',\n ].join(' ')}\n >\n {/* Header */}\n <div\n data-test-id='modal-header'\n className='flex items-center justify-between pt-[var(--deframe-widget-size-padding-y-md)] pr-[var(--deframe-widget-size-padding-x-md)] pb-[14px] pl-[var(--deframe-widget-size-padding-x-md)] border-b border-[color:var(--deframe-widget-color-border-secondary)] flex-shrink-0'\n >\n <span\n data-test-id='modal-title'\n className='text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] font-[var(--deframe-widget-font-family)]'\n >\n {labels.title}\n </span>\n <CloseButtonInline onClick={onClose} ariaLabel={labels.closeAriaLabel} />\n </div>\n\n {/* Body */}\n <div\n data-test-id='modal-body'\n className='flex flex-1 overflow-hidden'\n >\n {/* Left — Networks */}\n <div\n data-test-id='network-sidebar'\n className={[\n 'w-[210px] flex-shrink-0',\n 'border-r border-[color:var(--deframe-widget-color-border-secondary)]',\n 'bg-[#12151C]',\n 'flex flex-col overflow-hidden',\n ].join(' ')}\n >\n <div\n data-test-id='network-sidebar-label'\n className='px-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-xs)].5 text-[11px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-tertiary)] tracking-[0.06em] uppercase'\n >\n {labels.networksLabel}\n </div>\n <div\n ref={chainListRef}\n role='listbox'\n aria-label={labels.networksLabel}\n data-test-id='network-list'\n className='flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-sm)] pb-[var(--deframe-widget-size-padding-y-sm)] pt-[var(--deframe-widget-size-padding-y-xs)]'\n >\n {networks.map((network, i) => (\n <NetworkRow\n key={network.chainId}\n network={network}\n selected={activeNetwork?.chainId === network.chainId}\n onClick={() => handleNetworkSelect(network)}\n onKeyDown={(e) => handleChainKeyDown(e, network, i)}\n index={i}\n />\n ))}\n </div>\n </div>\n\n {/* Right — Assets */}\n <div\n data-test-id='asset-panel'\n className='flex-1 flex flex-col overflow-hidden'\n >\n {sharedSearchAssets}\n </div>\n </div>\n </motion.div>\n </motion.div>\n )\n } // end renderContent\n}\n","import React from 'react'\n\nconst SkeletonItem: React.FC = () => (\n <div className='w-full bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] min-h-[72px] flex items-center justify-between px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-sm)]'>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)] flex-1 min-w-0'>\n <div className='w-10 h-10 rounded-xl bg-[var(--deframe-widget-color-bg-tertiary)] animate-pulse flex-shrink-0' />\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-xs)] flex-1 min-w-0'>\n <div className='w-32 h-4 bg-[var(--deframe-widget-color-bg-tertiary)] rounded animate-pulse' />\n <div className='w-24 h-3 bg-[var(--deframe-widget-color-bg-tertiary)] rounded animate-pulse' />\n </div>\n </div>\n <div className='flex flex-col items-end gap-[var(--deframe-widget-size-gap-xs)] flex-shrink-0 ml-[var(--deframe-widget-size-gap-sm)]'>\n <div className='w-20 h-4 bg-[var(--deframe-widget-color-bg-tertiary)] rounded animate-pulse' />\n <div className='w-16 h-3 bg-[var(--deframe-widget-color-bg-tertiary)] rounded animate-pulse' />\n </div>\n </div>\n)\n\nconst SkeletonGroup: React.FC = () => (\n <div className='self-stretch flex flex-col gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='w-40 h-4 bg-[var(--deframe-widget-color-bg-tertiary)] rounded animate-pulse' />\n <SkeletonItem />\n <SkeletonItem />\n </div>\n)\n\nexport const LoadingSkeleton: React.FC = () => (\n <div className='self-stretch flex flex-col gap-[var(--deframe-widget-size-gap-md)]'>\n <SkeletonGroup />\n <SkeletonGroup />\n </div>\n)\n","import React from 'react'\nimport { PiClockCountdownBold } from 'react-icons/pi'\nimport { TextBody, TextHeading } from '../texts'\n\nexport interface EmptyStateProps {\n title: string\n description: string\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({ title, description }) => (\n <div className='w-full flex-1 py-[var(--deframe-widget-size-padding-y-md)] flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-sm)] overflow-hidden'>\n <div className='w-full flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-md)]'>\n <div className='flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-md)] text-center'>\n <div className='w-20 h-20 bg-[var(--deframe-widget-color-bg-tertiary)] rounded-[var(--deframe-widget-size-radius-full)] flex justify-center items-center'>\n <PiClockCountdownBold className='w-10 h-10 text-[var(--deframe-widget-color-text-tertiary)]' />\n </div>\n <TextHeading variant='h3'>{title}</TextHeading>\n </div>\n <div className='self-stretch text-center'>\n <TextBody variant='text-small'>{description}</TextBody>\n </div>\n </div>\n </div>\n)\n","import React from 'react'\nimport { MdArrowUpward } from 'react-icons/md'\n\nexport interface SwapItemIconProps {\n src: string\n alt: string\n}\n\nexport const SwapItemIcon: React.FC<SwapItemIconProps> = ({ src, alt }) => {\n const fallbackText = encodeURIComponent((alt || 'TOK').slice(0, 3).toUpperCase())\n const fallbackSrc = `https://placehold.co/40x40?text=${fallbackText}`\n const resolvedSrc = src || fallbackSrc\n\n return (\n <div className='relative flex-shrink-0'>\n <div className='w-10 h-10 rounded-xl bg-[var(--deframe-widget-color-bg-tertiary)] flex items-center justify-center overflow-hidden'>\n <img\n src={resolvedSrc}\n alt={alt}\n className='w-full h-full object-cover'\n onError={(e) => {\n ;(e.target as HTMLImageElement).src = fallbackSrc\n }}\n />\n </div>\n <div className='absolute bottom-[-2px] right-[-2px] w-[15px] h-[15px] rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-secondary)] flex items-center justify-center border border-[var(--deframe-widget-color-bg-secondary)]'>\n <MdArrowUpward className='w-3 h-3 text-[var(--deframe-widget-color-text-primary)]' />\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { BackgroundContainer } from '../layout'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { TertiaryButton } from '../buttons'\nimport type { SwapHistoryLabels } from '../../types/swap-history-labels'\nimport type { SwapHistoryItem } from '../../types/swap-history-item'\nimport { LoadingSkeleton } from './LoadingSkeleton'\nimport { EmptyState } from './EmptyState'\nimport { SwapItemIcon } from './SwapItemIcon'\n\nexport interface SwapHistoryViewProps {\n labels: SwapHistoryLabels\n isLoading: boolean\n items: SwapHistoryItem[]\n onItemClick: (itemId: string) => void\n pageSize?: number\n}\n\nexport const SwapHistoryView: React.FC<SwapHistoryViewProps> = ({\n labels,\n isLoading,\n items,\n onItemClick,\n pageSize = 10,\n}) => {\n const [visibleCount, setVisibleCount] = React.useState(pageSize)\n\n if (isLoading) {\n return (\n <BackgroundContainer className='px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col min-h-0 flex-1'>\n <LoadingSkeleton />\n </BackgroundContainer>\n )\n }\n\n if (items.length === 0) {\n return (\n <BackgroundContainer className='px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col min-h-0 flex-1'>\n <EmptyState title={labels.emptyTitle} description={labels.emptyDescription} />\n </BackgroundContainer>\n )\n }\n\n // Group items by dateKey\n const visibleItems = items.slice(0, visibleCount)\n const grouped = new Map<string, SwapHistoryItem[]>()\n for (const item of visibleItems) {\n const group = grouped.get(item.dateKey)\n if (group) {\n group.push(item)\n } else {\n grouped.set(item.dateKey, [item])\n }\n }\n const sortedDates = Array.from(grouped.keys()).sort((a, b) => b.localeCompare(a))\n const hasMore = items.length > visibleCount\n\n return (\n <BackgroundContainer className='px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col min-h-0 flex-1'>\n <div className='self-stretch flex flex-col gap-[16px]'>\n {sortedDates.map((dateKey) => {\n const groupItems = grouped.get(dateKey)!\n return (\n <div key={dateKey} className='self-stretch flex flex-col gap-[var(--deframe-widget-size-gap-sm)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {groupItems[0].dateLabel}\n </div>\n\n {groupItems.map((item) => (\n <ListItem\n key={item.id}\n onClick={() => onItemClick(item.id)}\n containerClassName='!rounded-[var(--deframe-widget-size-radius-xs)] !border-0 !min-h-[72px]'\n >\n <ListItemLeftSide>\n <SwapItemIcon src={item.iconUrl} alt={item.iconAlt} />\n </ListItemLeftSide>\n <ListItemContent>\n <span className='[font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {item.title}\n </span>\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {item.subtitle}\n </span>\n </ListItemContent>\n <ListItemRightSide>\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-primary)] whitespace-nowrap'>\n {item.amountFormatted}\n </span>\n {item.amountUsd && (\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)] whitespace-nowrap'>\n {item.amountUsd}\n </span>\n )}\n </ListItemRightSide>\n </ListItem>\n ))}\n </div>\n )\n })}\n\n {hasMore && (\n <div className='flex justify-center pt-[var(--deframe-widget-size-padding-y-sm)]'>\n <TertiaryButton onClick={() => setVisibleCount((c) => c + pageSize)}>\n {labels.loadMoreLabel}\n </TertiaryButton>\n </div>\n )}\n </div>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\nimport { BackgroundContainer, FlexCol, FlexRow, SectionCard, ScrollableContent } from '../layout'\nimport { DetailsHeader } from '../details-header'\nimport { InfoRow, InfoLabel, InfoValue } from '../info-display'\nimport {\n Amount,\n AmountInUsd,\n ExplorerLink,\n NotFoundMessage,\n SuccessBadge,\n TokenIcon,\n TransactionId,\n TransactionTypeLabel,\n TwoLineValue,\n} from '../history-details/HistoryDetailsComponents'\nimport type { HistorySwapDetailsLabels } from '../../types/history-swap-details-labels'\n\n// ─── Discriminated union props ───\n\ninterface BaseProps {\n labels: HistorySwapDetailsLabels\n onBack: () => void\n}\n\ninterface NotFoundProps extends BaseProps {\n status: 'not-found'\n}\n\ninterface UnavailableProps extends BaseProps {\n status: 'unavailable'\n}\n\ninterface LoadedProps extends BaseProps {\n status: 'loaded'\n\n // Asset In\n symbolIn: string\n amountInFormatted: string\n amountInUsd: string | null\n tokenInLogoUrl: string\n chainInName: string | null\n\n // Asset Out\n symbolOut: string\n amountOutFormatted: string\n amountOutUsd: string | null\n tokenOutLogoUrl: string\n chainOutName: string | null\n\n // Details\n routeOrNetworkLabel: string\n routeOrNetworkValue: string\n statusLabel: string\n txHash: string | null\n dateFormatted: string\n explorerUrl: string | null\n}\n\nexport type HistorySwapDetailsViewProps = NotFoundProps | UnavailableProps | LoadedProps\n\nexport const HistorySwapDetailsView: React.FC<HistorySwapDetailsViewProps> = (props) => {\n const { labels, onBack, status } = props\n\n if (status === 'not-found') {\n return (\n <BackgroundContainer>\n <DetailsHeader title={labels.headerTitle} onBack={onBack} />\n <NotFoundMessage>{labels.notFoundMessage}</NotFoundMessage>\n </BackgroundContainer>\n )\n }\n\n if (status === 'unavailable') {\n return (\n <BackgroundContainer>\n <DetailsHeader title={labels.headerTitle} onBack={onBack} />\n <NotFoundMessage>{labels.detailsUnavailableMessage}</NotFoundMessage>\n </BackgroundContainer>\n )\n }\n\n const {\n symbolIn, amountInFormatted, amountInUsd, tokenInLogoUrl, chainInName,\n symbolOut, amountOutFormatted, amountOutUsd, tokenOutLogoUrl, chainOutName,\n routeOrNetworkLabel, routeOrNetworkValue, statusLabel, txHash, dateFormatted, explorerUrl,\n } = props\n\n return (\n <BackgroundContainer>\n <DetailsHeader title={labels.headerTitle} onBack={onBack} />\n\n <ScrollableContent>\n <FlexCol gap='lg'>\n <SectionCard className='!p-[24px]'>\n <FlexCol gap='xs'>\n <TransactionTypeLabel>{labels.swapLabel}</TransactionTypeLabel>\n\n <FlexCol gap='sm'>\n <FlexRow gap='sm'>\n <TokenIcon src={tokenInLogoUrl} alt={symbolIn} />\n <FlexCol>\n <Amount>{amountInFormatted}</Amount>\n {amountInUsd\n ? (\n <AmountInUsd>{amountInUsd}</AmountInUsd>\n )\n : chainInName\n ? (\n <AmountInUsd>{chainInName}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n\n <FlexRow gap='sm'>\n <TokenIcon src={tokenOutLogoUrl} alt={symbolOut} />\n <FlexCol>\n <Amount>{amountOutFormatted}</Amount>\n {amountOutUsd\n ? (\n <AmountInUsd>{amountOutUsd}</AmountInUsd>\n )\n : chainOutName\n ? (\n <AmountInUsd>{chainOutName}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n </FlexCol>\n </FlexCol>\n </SectionCard>\n\n <SectionCard className='!p-[var(--deframe-widget-size-padding-x-md)]'>\n <FlexCol gap='sm'>\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>\n {routeOrNetworkLabel}\n </InfoLabel>\n <InfoValue className='font-[var(--deframe-widget-font-family)]'>\n {routeOrNetworkValue}\n </InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.sentLabel}</InfoLabel>\n <TwoLineValue primary={amountInFormatted} secondary={amountInUsd ?? '-'} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.receivedLabel}</InfoLabel>\n <TwoLineValue primary={amountOutFormatted} secondary={amountOutUsd ?? '-'} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.statusLabel}</InfoLabel>\n <SuccessBadge>{statusLabel}</SuccessBadge>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.txIdLabel}</InfoLabel>\n <TransactionId hash={txHash} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.dateLabel}</InfoLabel>\n <InfoValue className='font-[var(--deframe-widget-font-family)]'>{dateFormatted}</InfoValue>\n </InfoRow>\n\n {explorerUrl && (\n <InfoRow>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.transactionLabel}</InfoLabel>\n <ExplorerLink href={explorerUrl}>\n {labels.viewOnExplorerLabel}\n </ExplorerLink>\n </InfoRow>\n )}\n </FlexCol>\n </SectionCard>\n </FlexCol>\n </ScrollableContent>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\nimport { PrimaryButton } from '../buttons'\nimport { TextBody, TextHeading } from '../texts'\n\nexport interface SwapWidgetFallbackViewProps {\n title: string\n description: string\n buttonLabel: string\n onButtonClick: () => void\n}\n\nexport const SwapWidgetFallbackView: React.FC<SwapWidgetFallbackViewProps> = ({\n title,\n description,\n buttonLabel,\n onButtonClick,\n}) => {\n return (\n <div\n data-testid='swap-widget-fallback'\n className='flex flex-col items-center justify-center h-full px-[var(--deframe-widget-size-padding-x-md)] text-center gap-[var(--deframe-widget-size-gap-md)]'\n >\n <TextHeading variant='h-large'>{title}</TextHeading>\n <TextBody className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {description}\n </TextBody>\n <PrimaryButton className='w-full' onClick={onButtonClick}>\n {buttonLabel}\n </PrimaryButton>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface ApyRangeProps {\n children: React.ReactNode;\n}\n\nexport const ApyRange: React.FC<ApyRangeProps> = ({ children }) => {\n return (\n <div className='text-right justify-center text-text-highlight text-xs font-normal leading-4'>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport type LabelVariant = 'primary' | 'secondary'\n\nexport interface LabelProps {\n children: React.ReactNode\n variant?: LabelVariant\n className?: string\n}\n\nconst variantStyles: Record<LabelVariant, string> = {\n primary: 'text-text-primary dark:text-text-primary-dark text-text-md',\n secondary: 'text-text-secondary dark:text-text-secondary-dark text-text-sm font-poppins',\n}\n\nexport const Label: React.FC<LabelProps> = ({ children, variant = 'primary', className }) => {\n return (\n <div className={twMerge(variantStyles[variant], className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\n\nconst HistoryItemSkeleton: React.FC = () => (\n <div className='w-full bg-bg-subtle dark:bg-bg-subtle-dark rounded-xs min-h-[72px] flex items-center justify-between px-md py-sm'>\n <div className='flex items-center gap-sm flex-1 min-w-0'>\n <div className='w-10 h-10 rounded-xl bg-bg-muted dark:bg-bg-muted-dark animate-pulse flex-shrink-0' />\n <div className='flex flex-col gap-xs flex-1 min-w-0'>\n <div className='w-32 h-4 bg-bg-muted dark:bg-bg-muted-dark rounded animate-pulse' />\n <div className='w-24 h-3 bg-bg-muted dark:bg-bg-muted-dark rounded animate-pulse' />\n </div>\n </div>\n <div className='flex flex-col items-end gap-xs flex-shrink-0 ml-sm'>\n <div className='w-20 h-4 bg-bg-muted dark:bg-bg-muted-dark rounded animate-pulse' />\n <div className='w-16 h-3 bg-bg-muted dark:bg-bg-muted-dark rounded animate-pulse' />\n </div>\n </div>\n)\n\nconst HistoryGroupSkeleton: React.FC = () => (\n <div className='self-stretch flex flex-col gap-xs'>\n <div className='w-40 h-4 bg-bg-muted dark:bg-bg-muted-dark rounded animate-pulse' />\n <HistoryItemSkeleton />\n <HistoryItemSkeleton />\n </div>\n)\n\nexport const HistoryListSkeleton: React.FC = () => (\n <div className='self-stretch flex flex-col gap-md'>\n <HistoryGroupSkeleton />\n <HistoryGroupSkeleton />\n </div>\n)\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts/TextBody'\nimport { TextHeading } from '../texts/TextHeading'\n\ntype BackgroundVariant = 'subtle' | 'raised'\n\nexport interface WalletBalanceItem {\n label: string\n value: string\n badge?: React.ReactNode\n}\n\nexport interface WalletBalancesProps {\n cards: WalletBalanceItem[]\n variant?: BackgroundVariant\n className?: string\n}\n\nexport const WalletBalances: React.FC<WalletBalancesProps> = ({ cards, variant = 'subtle', className }) => {\n const bgClass = variant === 'raised' ? 'bg-[var(--deframe-widget-color-bg-raised)]' : 'bg-[var(--deframe-widget-color-bg-subtle)]'\n\n return (\n <div className={twMerge('w-full flex flex-row gap-4 mt-md', className)}>\n {cards.map((card) => (\n <div key={card.label} className={twMerge('flex-1 h-auto px-6 py-4 rounded shadow-sm flex flex-col items-start justify-start gap-xs', bgClass)}>\n <TextBody variant='text-small'>{card.label}</TextBody>\n {card.badge\n ? (\n <div className='flex w-full flex-col gap-xs md:flex-row md:items-end md:gap-[var(--deframe-widget-size-gap-md)]'>\n <TextHeading variant='h3'>{card.value}</TextHeading>\n <div className='md:pl-[var(--deframe-widget-size-padding-x-md)]'>{card.badge}</div>\n </div>\n )\n : (\n <TextHeading variant='h3'>{card.value}</TextHeading>\n )}\n </div>\n ))}\n </div>\n )\n}\n","import React from 'react'\nimport { PiClockCountdownBold } from 'react-icons/pi'\nimport { TextBody } from '../texts/TextBody'\nimport { TextHeading } from '../texts/TextHeading'\n\nexport interface HistoryTabEmptyProps {\n title: string\n description: string\n}\n\nexport const HistoryTabEmpty: React.FC<HistoryTabEmptyProps> = ({ title, description }) => (\n <div className='w-full h-[90vh] py-md bg-bg-default dark:bg-bg-default-dark rounded-lg flex flex-col justify-center items-center gap-sm overflow-hidden'>\n <div className='w-full flex flex-col justify-center items-center gap-md'>\n <div className='flex flex-col justify-center items-center gap-md text-center'>\n <div className='w-20 h-20 bg-bg-muted dark:bg-bg-muted-dark rounded-full flex justify-center items-center'>\n <PiClockCountdownBold className='w-10 h-10 text-text-tertiary dark:text-text-tertiary-dark' />\n </div>\n <TextHeading variant='h3'>{title}</TextHeading>\n </div>\n <div className='self-stretch text-center'>\n <TextBody variant='text-small'>{description}</TextBody>\n </div>\n </div>\n </div>\n)\n","import React from 'react'\nimport { TextBody } from '../texts/TextBody'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface StrategyGridCardProps {\n logoUrl: string\n title: string\n subtitle: string\n apyFormatted: string\n apyLabel: string\n onClick?: () => void\n className?: string\n}\n\nexport const StrategyGridCard: React.FC<StrategyGridCardProps> = ({\n logoUrl, title, subtitle, apyFormatted, apyLabel, onClick, className,\n}) => (\n <button\n type='button'\n onClick={onClick}\n data-test-id='strategy-grid-card'\n className={twMerge(\n 'flex flex-col gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-md)] rounded-[var(--deframe-widget-size-radius-sm)] h-[136px] min-h-[136px] flex-shrink-0',\n 'bg-[var(--deframe-widget-color-bg-primary)]',\n 'hover:bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'transition-colors cursor-pointer text-left w-full',\n className\n )}\n >\n <img src={logoUrl} alt={title} className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0' />\n <div className='flex items-end justify-between w-full'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody className='font-medium'>{title}</TextBody>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)]'>{subtitle}</TextBody>\n </div>\n <div className='flex flex-col items-end gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-primary-disabled)] text-right'>{apyLabel}</TextBody>\n <TextBody className='text-[color:var(--deframe-widget-color-brand-primary)]'>{apyFormatted}</TextBody>\n </div>\n </div>\n </button>\n)\n","import React from 'react'\nimport { HiArrowLeft } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface BackButtonProps {\n onClick?: () => void\n ariaLabel?: string\n className?: string\n}\n\nexport const BackButton: React.FC<BackButtonProps> = ({ onClick, ariaLabel = 'Back', className }) => {\n const baseClasses = 'w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-brand-primary)] transition-colors cursor-pointer'\n\n return (\n <button\n data-test-id='back-button'\n onClick={onClick}\n className={twMerge(baseClasses, className)}\n aria-label={ariaLabel}\n >\n <HiArrowLeft className='w-6 h-6' />\n </button>\n )\n}\n","import React from 'react'\nimport { TextBody } from '../texts/TextBody'\nimport { TextHeading } from '../texts/TextHeading'\n\nexport interface EarnBalanceCardProps {\n tokenIcon?: React.ReactNode\n fiatBalance: string\n profitAmount: string\n tokenAmount: string\n investedLabel: string\n earningsLabel: string\n isFetching?: boolean\n}\n\nexport const EarnBalanceCard: React.FC<EarnBalanceCardProps> = ({\n tokenIcon, fiatBalance, profitAmount, tokenAmount, investedLabel, earningsLabel, isFetching = false,\n}) => {\n const displayedTokenAmount = isFetching ? '...' : tokenAmount\n\n return (\n <div className='w-full flex flex-row gap-[var(--deframe-widget-size-gap-md)]'>\n <div className='flex-1 h-24 px-[var(--deframe-widget-size-padding-x-lg)] bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)] rounded shadow-sm flex flex-col items-start justify-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody variant='text-small'>{investedLabel}</TextBody>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n {tokenIcon && (\n <div className='w-5 h-5'>\n {typeof tokenIcon === 'string'\n ? (\n <img src={tokenIcon} alt='Token' className='w-5 h-5 rounded-full' />\n )\n : (\n tokenIcon\n )}\n </div>\n )}\n <TextHeading variant='h3'>{displayedTokenAmount}</TextHeading>\n </div>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)]'>\n ~{fiatBalance}\n </TextBody>\n </div>\n <div className='flex-1 h-24 px-[var(--deframe-widget-size-padding-x-lg)] bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)] rounded shadow-sm flex flex-col items-start justify-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody variant='text-small'>{earningsLabel}</TextBody>\n <TextHeading variant='h3'>{profitAmount}</TextHeading>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts/TextBody'\nimport { WalletBalances } from '../wallet-balances'\nimport { ProcessingBadge } from '../processing-badge'\n\nexport interface EarnInvestmentSummaryViewProps {\n overviewDescription: string\n totalInvestedLabel: string\n totalInvestedValue: string\n totalReturnLabel: string\n totalReturnValue: string\n processingBadgeLabel?: string\n processingBadgeTitle?: string\n className?: string\n}\n\n/**\n * Investment Summary view for desktop layout.\n * Pure view — displays total invested and total earned values.\n */\nexport const EarnInvestmentSummaryView: React.FC<EarnInvestmentSummaryViewProps> = ({\n overviewDescription,\n totalInvestedLabel,\n totalInvestedValue,\n totalReturnLabel,\n totalReturnValue,\n processingBadgeLabel,\n processingBadgeTitle,\n className,\n}) => {\n return (\n <section className={twMerge('flex flex-col gap-md p-lg bg-bg-subtle dark:bg-bg-subtle-dark rounded', className)}>\n <TextBody variant='text-small' className='text-text-secondary dark:text-text-secondary-dark'>\n {overviewDescription}\n </TextBody>\n\n <WalletBalances\n cards={[\n {\n label: totalInvestedLabel,\n value: totalInvestedValue,\n badge: processingBadgeLabel\n ? (\n <ProcessingBadge\n label={processingBadgeLabel}\n title={processingBadgeTitle}\n />\n )\n : undefined,\n },\n { label: totalReturnLabel, value: totalReturnValue },\n ]}\n variant='raised'\n className='grid grid-cols-2 gap-md !mt-0'\n />\n </section>\n )\n}\n\nexport default EarnInvestmentSummaryView\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts/TextBody'\n\nexport interface EarnInvestedSectionItem {\n strategyId: string\n logoUrl: string\n assetName: string\n subtitle: string\n balanceFormatted: string\n profitFormatted: string\n}\n\nexport interface EarnInvestedSectionViewProps {\n sectionTitle: string\n items: EarnInvestedSectionItem[]\n onItemClick?: (strategyId: string) => void\n className?: string\n}\n\n/**\n * Invested strategies section view for desktop layout.\n * Pure view — receives pre-formatted items and renders a vertical list.\n */\nexport const EarnInvestedSectionView: React.FC<EarnInvestedSectionViewProps> = ({\n sectionTitle,\n items,\n onItemClick,\n className,\n}) => {\n if (items.length === 0) {\n return null\n }\n\n return (\n <section\n className={twMerge(\n 'flex flex-col gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-lg)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-sm)]',\n className\n )}\n >\n {/* Section Title */}\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {sectionTitle}\n </TextBody>\n\n {/* List Items */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)]'>\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n\n return (\n <button\n key={item.strategyId}\n type='button'\n onClick={() => onItemClick?.(item.strategyId)}\n className={twMerge(\n 'flex items-center gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-md)] bg-[var(--deframe-widget-color-bg-primary)] rounded-[var(--deframe-widget-size-radius-sm)]',\n 'hover:bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'transition-colors cursor-pointer text-left w-full',\n !isLast && 'border-b border-[var(--deframe-widget-color-border-secondary)]'\n )}\n >\n {/* Logo */}\n <img\n src={item.logoUrl}\n alt={item.assetName}\n className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0'\n />\n\n {/* Title + Subtitle */}\n <div className='flex flex-col flex-1 min-w-0'>\n <TextBody className='font-medium truncate'>\n {item.assetName}\n </TextBody>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)] truncate'>\n {item.subtitle}\n </TextBody>\n </div>\n\n {/* Values */}\n <div className='flex flex-col items-end flex-shrink-0'>\n <TextBody className='font-medium'>\n {item.balanceFormatted}\n </TextBody>\n <TextBody variant='text-small'>\n {item.profitFormatted}\n </TextBody>\n </div>\n </button>\n )\n })}\n </div>\n </section>\n )\n}\n\nexport default EarnInvestedSectionView\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { LoadingDots } from '../loading-dots'\nimport { SearchEmptyState } from '../search-empty-state'\nimport { TextBody } from '../texts/TextBody'\nimport { StrategyGridCard } from '../strategy-grid-card'\n\nexport interface EarnExploreGridItem {\n id: string\n logoUrl: string\n title: string\n subtitle: string\n apyFormatted: string\n apyLabel: string\n}\n\nexport interface EarnExploreGridViewProps {\n sectionTitle: string\n loadingLabel: string\n errorLabel: string\n emptySearchTitle: string\n emptySearchDescription: string\n isLoading: boolean\n error?: Error | null\n strategies: EarnExploreGridItem[]\n searchBar: React.ReactNode\n chipGroup: React.ReactNode\n hasFilters: boolean\n onStrategyClick?: (strategyId: string) => void\n className?: string\n}\n\n/**\n * Explore strategies grid view for desktop layout.\n * Pure view — receives filtered strategies and renders a grid with search/filter UI.\n */\nexport const EarnExploreGridView: React.FC<EarnExploreGridViewProps> = ({\n sectionTitle,\n loadingLabel,\n errorLabel,\n emptySearchTitle,\n emptySearchDescription,\n isLoading,\n error,\n strategies,\n searchBar,\n chipGroup,\n hasFilters,\n onStrategyClick,\n className,\n}) => {\n const showEmptyState = hasFilters && strategies.length === 0\n\n if (isLoading) {\n return (\n <section\n className={twMerge(\n 'flex flex-col gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-lg)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-sm)]',\n className\n )}\n >\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {sectionTitle}\n </TextBody>\n <div className='text-[color:var(--deframe-widget-color-text-secondary)] flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n {loadingLabel}\n <LoadingDots />\n </div>\n </section>\n )\n }\n\n if (error) {\n return (\n <section\n className={twMerge(\n 'flex flex-col gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-lg)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-sm)]',\n className\n )}\n >\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {sectionTitle}\n </TextBody>\n <div className='text-[color:var(--deframe-widget-color-state-error)]'>\n {errorLabel}\n </div>\n </section>\n )\n }\n\n return (\n <section\n className={twMerge(\n 'flex flex-col gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-lg)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-sm)]',\n className\n )}\n >\n {/* Section Title */}\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {sectionTitle}\n </TextBody>\n\n {/* Search + Filters */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)]'>\n {searchBar}\n {chipGroup}\n </div>\n\n {/* Empty state */}\n {showEmptyState && (\n <div className='lg:h-[440px] flex items-center justify-center'>\n <SearchEmptyState title={emptySearchTitle} description={emptySearchDescription} />\n </div>\n )}\n\n {/* Grid with fixed height (2 rows of cards ~320px) and custom scrollbar */}\n {!showEmptyState && (\n <div\n className='explore-strategies-grid grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-[var(--deframe-widget-size-gap-md)] overflow-y-auto pr-[var(--deframe-widget-size-padding-x-sm)] h-[440px] auto-rows-[136px]'\n >\n {strategies.map((strategy) => (\n <StrategyGridCard\n key={strategy.id}\n logoUrl={strategy.logoUrl}\n title={strategy.title}\n subtitle={strategy.subtitle}\n apyFormatted={strategy.apyFormatted}\n apyLabel={strategy.apyLabel}\n onClick={() => onStrategyClick?.(strategy.id)}\n />\n ))}\n </div>\n )}\n </section>\n )\n}\n\nexport default EarnExploreGridView\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts/TextBody'\nimport { HistoryTabEmpty } from '../history-tab-empty'\nimport { HistoryListSkeleton } from '../history-list-skeleton'\n\nexport interface EarnRecentTransactionsViewProps {\n sectionTitle: string\n viewAllLabel: string\n isLoading: boolean\n hasMore: boolean\n hasItems: boolean\n historyList: React.ReactNode\n emptyTitle: string\n emptyDescription: string\n onViewAll?: () => void\n className?: string\n}\n\n/**\n * Recent transactions section view for desktop layout.\n * Pure view — renders a section with title, \"view all\" link, and history list slot.\n */\nexport const EarnRecentTransactionsView: React.FC<EarnRecentTransactionsViewProps> = ({\n sectionTitle,\n viewAllLabel,\n isLoading,\n hasMore,\n hasItems,\n historyList,\n emptyTitle,\n emptyDescription,\n onViewAll,\n className,\n}) => {\n return (\n <section\n className={twMerge(\n 'flex flex-col gap-md p-lg',\n 'bg-bg-subtle dark:bg-bg-subtle-dark rounded',\n className\n )}\n >\n <div className='flex items-center justify-between'>\n <TextBody variant='text-small' className='text-text-secondary dark:text-text-secondary-dark'>\n {sectionTitle}\n </TextBody>\n {hasMore && onViewAll && (\n <button\n type='button'\n onClick={onViewAll}\n className='text-brand-primary dark:text-brand-primary-dark hover:underline'\n >\n <TextBody variant='text-small'>{viewAllLabel}</TextBody>\n </button>\n )}\n </div>\n\n {isLoading\n ? (\n <HistoryListSkeleton />\n )\n : hasItems\n ? (\n historyList\n )\n : (\n <HistoryTabEmpty title={emptyTitle} description={emptyDescription} />\n )}\n </section>\n )\n}\n\nexport default EarnRecentTransactionsView\n","import React from 'react'\nimport { EarnInvestmentSummaryView, EarnInvestmentSummaryViewProps } from '../earn-investment-summary-view'\nimport { EarnInvestedSectionView, EarnInvestedSectionViewProps } from '../earn-invested-section-view'\nimport { EarnExploreGridView, EarnExploreGridViewProps } from '../earn-explore-grid-view'\nimport { EarnRecentTransactionsView, EarnRecentTransactionsViewProps } from '../earn-recent-transactions-view'\n\nexport interface EarnDesktopViewProps {\n isLoading: boolean\n loadingSkeleton?: React.ReactNode\n summary: EarnInvestmentSummaryViewProps\n invested: EarnInvestedSectionViewProps\n explore: EarnExploreGridViewProps\n transactions: EarnRecentTransactionsViewProps\n className?: string\n}\n\n/**\n * Desktop layout for Earn page.\n * Pure view — receives typed props per section and renders section views directly.\n */\nexport const EarnDesktopView: React.FC<EarnDesktopViewProps> = ({\n isLoading,\n loadingSkeleton,\n summary,\n invested,\n explore,\n transactions,\n}) => {\n if (isLoading) {\n if (loadingSkeleton) {\n return <>{loadingSkeleton}</>\n }\n return (\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)] w-full flex-1 min-h-0 animate-pulse px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)]'>\n <div className='h-24 rounded bg-[var(--deframe-widget-color-bg-secondary)]' />\n <div className='h-40 rounded bg-[var(--deframe-widget-color-bg-secondary)]' />\n <div className='h-60 rounded bg-[var(--deframe-widget-color-bg-secondary)]' />\n </div>\n )\n }\n\n return (\n <div className='text-[color:var(--deframe-widget-color-text-primary)] flex flex-col relative overflow-y-auto w-full flex-1 min-h-0 pb-[var(--deframe-widget-size-padding-y-lg)] gap-[var(--deframe-widget-size-gap-md)]'>\n {/* Summary Section */}\n <EarnInvestmentSummaryView {...summary} />\n\n {/* Onde voce ja investe */}\n <EarnInvestedSectionView {...invested} />\n\n {/* Explore as estrategias */}\n <EarnExploreGridView {...explore} />\n\n {/* Transacoes recentes */}\n <EarnRecentTransactionsView {...transactions} />\n </div>\n )\n}\n\nexport default EarnDesktopView\n","import React from 'react'\nimport { BackgroundContainer, Navbar } from '../layout'\nimport { PrimaryButton, TertiaryButton } from '../buttons'\nimport { SummaryDetails } from '../details'\nimport { TextBody } from '../texts/TextBody'\nimport { TextHeading } from '../texts/TextHeading'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { BackButton } from '../back-button'\nimport { EarnBalanceCard } from '../earn-balance-card'\nimport type { EarnInvestmentDetailsTransaction } from '../../types/earn-investment-details-transaction'\n\nexport type { EarnInvestmentDetailsTransaction }\n\ninterface EarnInvestmentDetailsLoadingProps {\n isLoading: true\n loadingSkeleton?: React.ReactNode\n}\n\ninterface EarnInvestmentDetailsContentProps {\n isLoading?: false\n loadingSkeleton?: never\n\n // Navigation\n title: string\n onBack?: () => void\n\n // Balance card\n tokenIcon?: string\n fiatBalance: string\n profitAmount: string\n tokenAmount: string\n investedLabel: string\n earningsLabel: string\n\n // Summary details\n summaryTitle: string\n summaryItems: Array<{ label: string; value: string }>\n\n // Past activities\n pastActivitiesTitle: string\n transactions: EarnInvestmentDetailsTransaction[]\n onTransactionClick: (transactionId: string) => void\n showMoreButton: boolean\n onLoadMore: () => void\n loadMoreLabel: string\n\n // Action buttons\n depositLabel: string\n onDeposit: () => void\n withdrawLabel: string\n onWithdraw: () => void\n}\n\nexport type EarnInvestmentDetailsViewProps =\n | EarnInvestmentDetailsLoadingProps\n | EarnInvestmentDetailsContentProps\n\nexport const EarnInvestmentDetailsView: React.FC<EarnInvestmentDetailsViewProps> = (props) => {\n if (props.isLoading) {\n return <BackgroundContainer>{props.loadingSkeleton}</BackgroundContainer>\n }\n\n const {\n title,\n onBack,\n tokenIcon,\n fiatBalance,\n profitAmount,\n tokenAmount,\n investedLabel,\n earningsLabel,\n summaryTitle,\n summaryItems,\n pastActivitiesTitle,\n transactions,\n onTransactionClick,\n showMoreButton,\n onLoadMore,\n loadMoreLabel,\n depositLabel,\n onDeposit,\n withdrawLabel,\n onWithdraw,\n } = props\n\n return (\n <BackgroundContainer>\n <Navbar>\n <BackButton onClick={onBack} />\n <TextHeading variant='h1'>{title}</TextHeading>\n </Navbar>\n\n <div className='flex-1 flex flex-col min-h-0 px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-sm)] gap-[var(--deframe-widget-size-gap-md)]'>\n <EarnBalanceCard\n tokenIcon={tokenIcon}\n fiatBalance={fiatBalance}\n profitAmount={profitAmount}\n tokenAmount={tokenAmount}\n investedLabel={investedLabel}\n earningsLabel={earningsLabel}\n />\n\n <SummaryDetails\n title={summaryTitle}\n items={summaryItems}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n />\n\n <div className='w-full rounded-[var(--deframe-widget-size-radius-sm)] flex flex-col gap-[var(--deframe-widget-size-gap-sm)] flex-shrink-0'>\n <TextHeading variant='h5'>{pastActivitiesTitle}</TextHeading>\n <div className='investment-activities-list flex flex-col gap-[var(--deframe-widget-size-gap-sm)] overflow-y-auto max-h-[280px] pr-[var(--deframe-widget-size-padding-x-sm)]'>\n {transactions.map((tx) => (\n <ListItem\n key={`tx-history-${tx.id}`}\n onClick={() => onTransactionClick(tx.id)}\n >\n <ListItemLeftSide>\n <img src={tokenIcon} alt='Token' className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)]' />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{tx.action}</TextBody>\n <TextBody variant='text-small'>{tx.date}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <TextBody>{tx.usdAmount}</TextBody>\n <TextBody variant='text-small'>{tx.tokenAmount}</TextBody>\n </ListItemRightSide>\n </ListItem>\n ))}\n {showMoreButton && (\n <div className='flex justify-center items-center w-full py-4 flex-shrink-0'>\n <TertiaryButton onClick={onLoadMore}>\n {loadMoreLabel}\n </TertiaryButton>\n </div>\n )}\n </div>\n </div>\n </div>\n\n <div className='sticky bottom-0 left-0 right-0 border-t border-[var(--deframe-widget-color-border-secondary)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'>\n <div className='flex justify-between gap-[var(--deframe-widget-size-gap-md)]'>\n <PrimaryButton onClick={onDeposit} className='w-full'>{depositLabel}</PrimaryButton>\n <PrimaryButton onClick={onWithdraw} className='w-full'>{withdrawLabel}</PrimaryButton>\n </div>\n </div>\n </BackgroundContainer>\n )\n}\n\nexport default EarnInvestmentDetailsView\n","import React from 'react'\nimport { MdArrowRight } from 'react-icons/md'\nimport { ApyRange } from '../apy-range'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { LoadingDots } from '../loading-dots'\nimport { TextBody } from '../texts/TextBody'\n\nconst GroupLabel: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <div className='text-text-secondary dark:text-text-secondary-dark text-sm font-medium font-poppins py-3'>\n {children}\n </div>\n)\n\nexport interface GroupedStrategyListItem {\n id: string\n logoUrl: string\n title: string\n subtitle: string\n onClick: () => void\n}\n\nexport interface GroupedInvestedItem extends GroupedStrategyListItem {\n balanceFormatted: string\n profitFormatted: string\n}\n\nexport interface GroupedStrategyItem extends GroupedStrategyListItem {\n apyFormatted: string\n}\n\nexport interface GroupedStrategyListViewProps {\n isLoading: boolean\n loadingLabel: string\n error: Error | null\n errorLabel: string\n\n investedLabel: string\n investedItems: GroupedInvestedItem[]\n\n bestPerformanceLabel: string\n bestPerformanceItems: GroupedStrategyItem[]\n\n allStrategiesLabel: string\n allStrategiesItems: GroupedStrategyItem[]\n}\n\n/**\n * Grouped strategy list view for mobile overview tab.\n * Pure view — receives pre-formatted items grouped by category.\n */\nexport const GroupedStrategyListView: React.FC<GroupedStrategyListViewProps> = ({\n isLoading,\n loadingLabel,\n error,\n errorLabel,\n investedLabel,\n investedItems,\n bestPerformanceLabel,\n bestPerformanceItems,\n allStrategiesLabel,\n allStrategiesItems,\n}) => {\n const hasInvested = investedItems.length > 0\n const hasBestPerformance = bestPerformanceItems.length > 0\n const hasAllStrategies = allStrategiesItems.length > 0\n\n if (isLoading) {\n return (\n <div className='flex items-center py-md'>\n {loadingLabel}{' '}<LoadingDots />\n </div>\n )\n }\n\n if (error) {\n return <div className='p-4 text-center text-red-500'>{errorLabel}: {error.message}</div>\n }\n\n return (\n <div className='w-full flex flex-col gap-sm flex-1 min-h-0 overflow-y-auto'>\n {/* Invested */}\n {hasInvested && (\n <>\n <GroupLabel>{investedLabel}</GroupLabel>\n <div className='flex flex-col gap-sm'>\n {investedItems.map((item) => (\n <ListItem\n key={`invested-${item.id}`}\n onClick={() => item.onClick()}\n >\n <ListItemLeftSide>\n <img\n src={item.logoUrl}\n alt={item.subtitle}\n className='w-10 h-10 rounded-full'\n />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{item.title}</TextBody>\n <TextBody variant='text-small'>{item.subtitle}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <div className='flex flex-row justify-between items-center'>\n <div className='flex flex-col items-end'>\n <TextBody>{item.balanceFormatted}</TextBody>\n <TextBody variant='text-small'>{item.profitFormatted}</TextBody>\n </div>\n <MdArrowRight className='w-6 h-6' />\n </div>\n </ListItemRightSide>\n </ListItem>\n ))}\n </div>\n </>\n )}\n\n {/* Best performance */}\n {hasBestPerformance && (\n <>\n <GroupLabel>{bestPerformanceLabel}</GroupLabel>\n <div className='flex flex-col gap-sm'>\n {bestPerformanceItems.map((item) => (\n <ListItem\n key={`best-${item.id}`}\n onClick={() => item.onClick()}\n >\n <ListItemLeftSide>\n <img\n src={item.logoUrl}\n alt={item.subtitle}\n className='w-10 h-10 rounded-full'\n />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{item.title}</TextBody>\n <TextBody variant='text-small'>{item.subtitle}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <div className='flex flex-row justify-between items-center'>\n <ApyRange>{item.apyFormatted}</ApyRange>\n <MdArrowRight className='w-6 h-6' />\n </div>\n </ListItemRightSide>\n </ListItem>\n ))}\n </div>\n </>\n )}\n\n {/* All strategies */}\n {hasAllStrategies && (\n <>\n <GroupLabel>{allStrategiesLabel}</GroupLabel>\n <div className='flex flex-col gap-sm'>\n {allStrategiesItems.map((item) => (\n <ListItem\n key={`all-${item.id}`}\n onClick={() => item.onClick()}\n >\n <ListItemLeftSide>\n <img\n src={item.logoUrl}\n alt={item.subtitle}\n className='w-10 h-10 rounded-full'\n />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{item.title}</TextBody>\n <TextBody variant='text-small'>{item.subtitle}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <div className='flex flex-row justify-between items-center'>\n <ApyRange>{item.apyFormatted}</ApyRange>\n <MdArrowRight className='w-6 h-6' />\n </div>\n </ListItemRightSide>\n </ListItem>\n ))}\n </div>\n </>\n )}\n </div>\n )\n}\n\nexport default GroupedStrategyListView\n","import React from 'react'\n\nexport const DateLabel: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n return (\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { MdArrowDownward, MdArrowUpward } from 'react-icons/md'\n\nexport const ArrowBadge: React.FC<{ isDeposit: boolean }> = ({ isDeposit }) => {\n return (\n <div className='absolute bottom-[-2px] right-[-2px] w-[15px] h-[15px] rounded-full bg-bg-subtle dark:bg-bg-subtle-dark flex items-center justify-center border border-bg-subtle dark:border-bg-subtle-dark'>\n {isDeposit\n ? (\n <MdArrowDownward className='w-3 h-3 text-text-primary dark:text-text-primary-dark' />\n )\n : (\n <MdArrowUpward className='w-3 h-3 text-text-primary dark:text-text-primary-dark' />\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { ArrowBadge } from './ArrowBadge'\n\nexport const TokenIconWithBadge: React.FC<{\n src: string\n alt: string\n isDeposit: boolean\n}> = ({ src, alt, isDeposit }) => {\n const fallbackText = encodeURIComponent((alt || 'TOK').slice(0, 3).toUpperCase())\n const fallbackSrc = `https://placehold.co/40x40?text=${fallbackText}`\n const resolvedSrc = src || fallbackSrc\n return (\n <div className='relative flex-shrink-0'>\n <div className='w-10 h-10 rounded-xl bg-bg-muted dark:bg-bg-muted-dark flex items-center justify-center overflow-hidden'>\n <img\n src={resolvedSrc}\n alt={alt}\n className='w-full h-full object-cover'\n onError={(e) => {\n (e.target as HTMLImageElement).src = fallbackSrc\n }}\n />\n </div>\n <ArrowBadge isDeposit={isDeposit} />\n </div>\n )\n}\n","import React from 'react'\nimport { MdArrowUpward } from 'react-icons/md'\n\nexport const SwapIconWithBadge: React.FC<{ src?: string; alt: string }> = ({ src, alt }) => {\n const fallbackText = encodeURIComponent((alt || 'TOK').slice(0, 3).toUpperCase())\n const fallbackSrc = `https://placehold.co/40x40?text=${fallbackText}`\n const resolvedSrc = src || fallbackSrc\n return (\n <div className='relative flex-shrink-0'>\n <div className='w-10 h-10 rounded-xl bg-bg-muted dark:bg-bg-muted-dark flex items-center justify-center overflow-hidden'>\n <img\n src={resolvedSrc}\n alt={alt}\n className='w-full h-full object-cover'\n onError={(e) => {\n (e.target as HTMLImageElement).src = fallbackSrc\n }}\n />\n </div>\n <div className='absolute bottom-[-2px] right-[-2px] w-[15px] h-[15px] rounded-full bg-bg-subtle dark:bg-bg-subtle-dark flex items-center justify-center border border-bg-subtle dark:border-bg-subtle-dark'>\n <MdArrowUpward className='w-3 h-3 text-text-primary dark:text-text-primary-dark' />\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { Label } from '../label'\n\nexport const AmountDisplay: React.FC<{ amount: string; usdAmount?: string }> = ({ amount, usdAmount }) => {\n return (\n <>\n <Label className='text-accent-sm-mobile whitespace-nowrap'>{amount}</Label>\n {usdAmount\n ? (\n <Label variant='secondary' className='whitespace-nowrap'>{usdAmount}</Label>\n )\n : null}\n </>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TertiaryButton } from '../buttons'\nimport { Label } from '../label'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { DateLabel } from './DateLabel'\nimport { TokenIconWithBadge } from './TokenIconWithBadge'\nimport { SwapIconWithBadge } from './SwapIconWithBadge'\nimport { AmountDisplay } from './AmountDisplay'\nimport { ProcessingBadge } from '../processing-badge'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface HistoryListViewItem {\n id: string\n iconUrl: string\n iconAlt: string\n isDeposit: boolean\n isSwap: boolean\n title: string\n subtitle: string\n amountFormatted: string\n amountUsd?: string\n status?: 'SUCCESS' | 'PENDING' | 'FAILED' | 'REFUNDED'\n statusLabel?: string\n statusTitle?: string\n onClick: () => void\n}\n\nexport interface HistoryListViewGroup {\n dateLabel: string\n items: HistoryListViewItem[]\n}\n\nexport interface HistoryListViewProps {\n groups: HistoryListViewGroup[]\n showLoadMore: boolean\n onLoadMore: () => void\n loadMoreLabel: string\n itemClassName?: string\n itemVariant?: 'subtle' | 'raised'\n}\n\n// ============================================================================\n// View\n// ============================================================================\n\n/**\n * History list view.\n * Pure view — receives pre-grouped, pre-formatted history items.\n */\nexport const HistoryListView: React.FC<HistoryListViewProps> = ({\n groups,\n showLoadMore,\n onLoadMore,\n loadMoreLabel,\n itemClassName,\n}) => {\n if (groups.length === 0) {\n return null\n }\n\n return (\n <div className='self-stretch flex flex-col gap-[16px]'>\n {groups.map((group) => (\n <div key={group.dateLabel} className='self-stretch flex flex-col gap-sm'>\n <DateLabel>{group.dateLabel}</DateLabel>\n\n {group.items.map((item) => (\n <ListItem\n key={item.id}\n onClick={() => item.onClick()}\n containerClassName={twMerge('!rounded-xs !border-0 !min-h-[72px]', itemClassName)}\n >\n <ListItemLeftSide>\n {item.isSwap\n ? (\n <SwapIconWithBadge src={item.iconUrl} alt={item.iconAlt} />\n )\n : (\n <TokenIconWithBadge\n src={item.iconUrl}\n alt={item.iconAlt}\n isDeposit={item.isDeposit}\n />\n )}\n </ListItemLeftSide>\n\n <ListItemContent>\n <Label className='text-text-lg-mobile'>{item.title}</Label>\n <Label variant='secondary' className='text-text-tertiary dark:text-text-tertiary-dark'>\n {item.subtitle}\n </Label>\n {item.status === 'PENDING' && item.statusLabel\n ? (\n <div className='mt-[6px]'>\n <ProcessingBadge\n label={item.statusLabel}\n title={item.statusTitle}\n size='compact'\n />\n </div>\n )\n : null}\n </ListItemContent>\n\n <ListItemRightSide>\n <AmountDisplay amount={item.amountFormatted} usdAmount={item.amountUsd} />\n </ListItemRightSide>\n </ListItem>\n ))}\n </div>\n ))}\n\n {showLoadMore && (\n <div className='flex justify-center pt-sm'>\n <TertiaryButton onClick={onLoadMore}>\n {loadMoreLabel}\n </TertiaryButton>\n </div>\n )}\n </div>\n )\n}\n\nexport default HistoryListView\n","import React from 'react'\nimport { TextBody } from '../texts'\nimport { LoadingDots } from '../loading-dots'\nimport { HiChevronDown } from 'react-icons/hi2'\nimport type { ChainItem } from '../../types/chain-item'\n\nexport interface EarnTokenSelectorViewProps {\n selectedToken: { symbol: string; logoURI?: string | null } | null;\n onTokenClick: () => void;\n onNetworkClick?: (currentNetworkSelected?: ChainItem | null) => void;\n isLoading: boolean;\n selectTokenLabel: string;\n chainLabel: string;\n chainImage?: string;\n chainDirectionLabel: string; // \"Pagar em\" (deposit) or \"Receber em\" (withdraw)\n chainDisabledTitle?: string;\n isNetworkDisabled?: boolean;\n currentNetworkSelected?: ChainItem | null;\n}\n\nexport const EarnTokenSelectorView: React.FC<EarnTokenSelectorViewProps> = ({\n selectedToken,\n onTokenClick,\n onNetworkClick,\n isLoading,\n selectTokenLabel,\n chainLabel,\n chainImage,\n chainDirectionLabel,\n chainDisabledTitle,\n isNetworkDisabled = false,\n currentNetworkSelected,\n}) => (\n <div className='flex flex-col gap-[10px]'>\n {/* Token Selector */}\n <div className='flex gap-[10px] w-full'>\n <button\n type='button'\n onClick={onTokenClick}\n className='flex-1 h-[56px] border border-[var(--deframe-widget-color-border-primary)] rounded overflow-hidden hover:border-[var(--deframe-widget-color-border-primary)] transition-colors'\n >\n <div className='flex h-full items-center justify-between px-[var(--deframe-widget-size-padding-x-sm)] py-[6px]'>\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] items-center'>\n {selectedToken?.logoURI\n ? (\n <>\n <img\n src={selectedToken.logoURI}\n alt={selectedToken.symbol}\n className='w-6 h-6 rounded-full'\n />\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-primary)]'>\n {selectedToken.symbol}\n </TextBody>\n </>\n )\n : isLoading\n ? (\n <LoadingDots />\n )\n : (\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {selectTokenLabel}\n </TextBody>\n )}\n </div>\n <div className='w-[18px] h-[18px] flex items-center justify-center'>\n <HiChevronDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </div>\n </button>\n </div>\n\n {/* Chain Selector */}\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] items-center'>\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {chainDirectionLabel}\n </TextBody>\n <button\n type='button'\n onClick={() => onNetworkClick?.(currentNetworkSelected)}\n disabled={isNetworkDisabled}\n title={chainDisabledTitle}\n className={`bg-[var(--deframe-widget-color-bg-tertiary)] border border-[var(--deframe-widget-color-border-secondary)] rounded-lg flex gap-[var(--deframe-widget-size-gap-xs)] items-center px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] transition-colors ${\n isNetworkDisabled\n ? 'opacity-60 cursor-not-allowed'\n : 'cursor-pointer hover:border-[var(--deframe-widget-color-border-primary)]'\n }`}\n >\n {chainImage && <img src={chainImage} alt='' className='w-3 h-3 rounded-full' />}\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {chainLabel}\n </TextBody>\n <div className={`w-[18px] h-[18px] flex items-center justify-center ${isNetworkDisabled ? 'opacity-50' : ''}`}>\n <HiChevronDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </button>\n </div>\n </div>\n)\n","import React from 'react'\nimport { TextBody } from '../texts'\n\nexport interface EarnAmountInputViewProps {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n ariaLabel: string;\n dollarAmountFormatted: string;\n availableBalanceFormatted?: string; // \"Total disponível: 100.50\" — undefined for withdraw\n}\n\nexport const EarnAmountInputView: React.FC<EarnAmountInputViewProps> = ({\n value,\n onChange,\n ariaLabel,\n dollarAmountFormatted,\n availableBalanceFormatted,\n}) => {\n return (\n <div className='flex-1 flex flex-col items-end justify-between min-h-[86px] text-right'>\n {/* Amount Input */}\n <div className='flex flex-col items-end text-[color:var(--deframe-widget-color-text-secondary)]'>\n <input\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n autoComplete='off'\n aria-label={ariaLabel}\n value={value}\n min='0'\n step='any'\n className='[font-size:var(--deframe-widget-font-size-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] bg-transparent outline-none text-right w-full min-w-[105px] placeholder:text-[color:var(--deframe-widget-color-text-primary-disabled)] [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none'\n onChange={onChange}\n onWheel={(event: React.WheelEvent<HTMLInputElement>) => {\n event.currentTarget.blur()\n }}\n />\n <TextBody as='span' variant='text-small'>\n {dollarAmountFormatted}\n </TextBody>\n </div>\n\n {/* Available Balance (deposit only) */}\n {availableBalanceFormatted && (\n <div className='[font-size:var(--deframe-widget-font-size-sm)] text-[color:var(--deframe-widget-color-text-tertiary)] whitespace-nowrap'>\n {availableBalanceFormatted}\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { PercentageButton } from '../buttons'\n\nexport interface EarnPercentageButtonsViewProps {\n onPercentageClick: (basisPoints: number) => void;\n maxLabel: string;\n}\n\nexport const EarnPercentageButtonsView: React.FC<EarnPercentageButtonsViewProps> = ({\n onPercentageClick,\n maxLabel,\n}) => (\n <div className='px-[var(--deframe-widget-size-padding-x-md)] mt-[var(--deframe-widget-size-gap-md)] w-full'>\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <PercentageButton onClick={() => onPercentageClick(2500)}>25%</PercentageButton>\n <PercentageButton onClick={() => onPercentageClick(5000)}>50%</PercentageButton>\n <PercentageButton onClick={() => onPercentageClick(7500)}>75%</PercentageButton>\n <PercentageButton onClick={() => onPercentageClick(10000)}>{maxLabel}</PercentageButton>\n </div>\n </div>\n)\n","import React from 'react'\nimport { TextBody } from '../texts'\nimport { MdArrowDropDown } from 'react-icons/md'\nimport type { ChainItem } from '../../types/chain-item'\n\nexport interface EarnWithdrawTokenSelectorViewProps {\n selectedToken: { symbol: string; logoURI?: string | null } | null;\n onTokenClick: () => void;\n onNetworkClick?: (currentNetworkSelected?: ChainItem | null) => void;\n selectTokenLabel: string;\n chainLabel: string;\n chainImage?: string;\n chainDirectionLabel: string;\n chainDisabledTitle?: string;\n isNetworkDisabled?: boolean;\n currentNetworkSelected?: ChainItem | null;\n}\n\nexport const EarnWithdrawTokenSelectorView: React.FC<EarnWithdrawTokenSelectorViewProps> = ({\n selectedToken,\n onTokenClick,\n onNetworkClick,\n selectTokenLabel,\n chainLabel,\n chainImage,\n chainDirectionLabel,\n chainDisabledTitle,\n isNetworkDisabled = false,\n currentNetworkSelected,\n}) => (\n <div className='flex flex-col gap-[10px]'>\n {/* Token Selector (what to receive) */}\n <div className='flex gap-[10px] w-full'>\n <button\n type='button'\n onClick={onTokenClick}\n className='flex-1 h-[56px] border border-[var(--deframe-widget-color-border-primary)] rounded overflow-hidden hover:border-[var(--deframe-widget-color-border-primary)] transition-colors'\n >\n <div className='flex h-full items-center justify-between px-[var(--deframe-widget-size-padding-x-sm)] py-[6px]'>\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] items-center'>\n {selectedToken?.symbol\n ? (\n <>\n {selectedToken.logoURI && (\n <img\n src={selectedToken.logoURI}\n alt={selectedToken.symbol}\n className='w-6 h-6 rounded-full'\n />\n )}\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-primary)]'>\n {selectedToken.symbol}\n </TextBody>\n </>\n )\n : (\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {selectTokenLabel}\n </TextBody>\n )}\n </div>\n <div className='w-[18px] h-[18px] flex items-center justify-center'>\n <MdArrowDropDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </div>\n </button>\n </div>\n\n {/* Receive on Chain Selector */}\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] items-center'>\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {chainDirectionLabel}\n </TextBody>\n <button\n type='button'\n onClick={() => onNetworkClick?.(currentNetworkSelected)}\n disabled={isNetworkDisabled}\n title={chainDisabledTitle}\n className={`bg-[var(--deframe-widget-color-bg-tertiary)] border border-[var(--deframe-widget-color-border-secondary)] rounded-lg flex gap-[var(--deframe-widget-size-gap-xs)] items-center px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] transition-colors ${\n isNetworkDisabled\n ? 'opacity-60 cursor-not-allowed'\n : 'cursor-pointer hover:border-[var(--deframe-widget-color-border-primary)]'\n }`}\n >\n {chainImage && <img src={chainImage} alt='' className='w-3 h-3 rounded-full' />}\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {chainLabel}\n </TextBody>\n <div className={`w-[18px] h-[18px] flex items-center justify-center ${isNetworkDisabled ? 'opacity-50' : ''}`}>\n <MdArrowDropDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </button>\n </div>\n </div>\n)\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { PrimaryButton } from '../buttons'\nimport { TextBody } from '../texts'\n\nexport interface EarnNoBalanceNotificationViewProps {\n prompt: string;\n actionLabel: string;\n onAction: () => void;\n}\n\nexport const EarnNoBalanceNotificationView: React.FC<EarnNoBalanceNotificationViewProps> = ({\n prompt,\n actionLabel,\n onAction,\n}) => (\n <div className='px-[var(--deframe-widget-size-padding-x-md)] mt-[var(--deframe-widget-size-gap-md)]'>\n <SectionCard className='bg-[var(--deframe-widget-color-state-warning)]/10 border border-[var(--deframe-widget-color-state-warning)]/20'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)]'>\n <div className='flex items-start gap-[var(--deframe-widget-size-gap-sm)]'>\n <svg className='w-5 h-5 text-[color:var(--deframe-widget-color-state-warning)] flex-shrink-0 mt-0.5' fill='currentColor' viewBox='0 0 20 20'>\n <path fillRule='evenodd' d='M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z' clipRule='evenodd' />\n </svg>\n <div className='flex-1'>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-primary)]'>\n {prompt}\n </TextBody>\n </div>\n </div>\n <PrimaryButton\n type='button'\n onClick={onAction}\n className='w-full mt-[var(--deframe-widget-size-gap-sm)]'\n >\n {actionLabel}\n </PrimaryButton>\n </div>\n </SectionCard>\n </div>\n)\n","import React from 'react'\nimport { SectionCard } from '../layout'\n\nexport interface EarnTxStatusCardViewProps {\n statusLabel: string;\n isProcessing: boolean;\n successMessage?: string;\n errorMessage?: string;\n}\n\nexport const EarnTxStatusCardView: React.FC<EarnTxStatusCardViewProps> = ({\n statusLabel,\n isProcessing,\n successMessage,\n errorMessage,\n}) => (\n <SectionCard>\n <div className='flex items-center justify-between'>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n {isProcessing && (\n <svg className='h-5 w-5 animate-spin text-[color:var(--deframe-widget-color-brand-primary)]' viewBox='0 0 24 24'>\n <circle className='opacity-25' cx='12' cy='12' r='10' stroke='currentColor' strokeWidth='4' fill='none' />\n <path className='opacity-75' fill='currentColor' d='M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z' />\n </svg>\n )}\n <div className='text-[color:var(--deframe-widget-color-text-secondary)] [font-size:var(--deframe-widget-font-size-sm)] font-[var(--deframe-widget-font-family)]'>\n {statusLabel}\n </div>\n </div>\n </div>\n\n {successMessage && (\n <div className='mt-[var(--deframe-widget-size-gap-sm)] rounded px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] bg-[var(--deframe-widget-color-state-success)]/10 text-[color:var(--deframe-widget-color-state-success)] [font-size:var(--deframe-widget-font-size-sm)] font-[var(--deframe-widget-font-family)]'>\n {successMessage}\n </div>\n )}\n\n {errorMessage && (\n <div className='mt-[var(--deframe-widget-size-gap-sm)] rounded px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] bg-[var(--deframe-widget-color-state-error)]/10 text-[color:var(--deframe-widget-color-state-error)] [font-size:var(--deframe-widget-font-size-sm)] font-[var(--deframe-widget-font-family)]'>\n {errorMessage}\n </div>\n )}\n </SectionCard>\n)\n","import React from 'react'\n\nexport interface EarnBytecodeErrorViewProps {\n errorTitle: string;\n errorMessage: string;\n}\n\nexport const EarnBytecodeErrorView: React.FC<EarnBytecodeErrorViewProps> = ({\n errorTitle,\n errorMessage,\n}) => (\n <div className='rounded px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-sm)] bg-[var(--deframe-widget-color-state-error)]/10 border border-[var(--deframe-widget-color-state-error)]/20'>\n <div className='flex items-start gap-[var(--deframe-widget-size-gap-sm)]'>\n <svg className='w-5 h-5 text-[color:var(--deframe-widget-color-state-error)] flex-shrink-0' fill='currentColor' viewBox='0 0 20 20'>\n <path fillRule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z' clipRule='evenodd' />\n </svg>\n <div className='flex-1'>\n <div className='text-[color:var(--deframe-widget-color-state-error)] [font-weight:var(--deframe-widget-font-weight-medium)] [font-size:var(--deframe-widget-font-size-sm)] font-[var(--deframe-widget-font-family)] mb-[var(--deframe-widget-size-gap-xs)]'>\n {errorTitle}\n </div>\n <div className='text-[color:var(--deframe-widget-color-text-primary)] [font-size:var(--deframe-widget-font-size-sm)] font-[var(--deframe-widget-font-family)]'>\n {errorMessage}\n </div>\n </div>\n </div>\n </div>\n)\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { TextBody } from '../texts'\n\nexport interface EarnPositionCardViewProps {\n balanceUSD: string;\n balanceToken: string;\n icon?: string;\n iconAlt?: string;\n}\n\nexport const EarnPositionCardView: React.FC<EarnPositionCardViewProps> = ({\n balanceUSD,\n balanceToken,\n icon,\n iconAlt,\n}) => (\n <div className='px-[var(--deframe-widget-size-padding-x-md)]'>\n <SectionCard>\n <div className='flex items-center justify-start'>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n {icon && (\n <img\n src={icon}\n alt={iconAlt}\n className='w-6 h-6 rounded-full'\n />\n )}\n <div className='flex flex-col'>\n <span className='[font-size:var(--deframe-widget-font-size-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {balanceUSD}\n </span>\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {balanceToken}\n </TextBody>\n </div>\n </div>\n </div>\n </SectionCard>\n </div>\n)\n","import React from 'react'\nimport { BackgroundContainer, SectionCard } from '../layout'\nimport { DetailsHeader } from '../details-header'\nimport { ProgressIndicator } from '../progress'\nimport { TextHeading, TextBody } from '../texts'\nimport { InfoRow, InfoLabel, InfoValue } from '../info-display'\nimport { PrimaryButton } from '../buttons'\nimport { EarnTokenSelectorView } from '../earn-token-selector-view/EarnTokenSelectorView'\nimport { EarnAmountInputView } from '../earn-amount-input-view/EarnAmountInputView'\nimport { EarnPercentageButtonsView } from '../earn-percentage-buttons-view/EarnPercentageButtonsView'\nimport { EarnNoBalanceNotificationView } from '../earn-no-balance-notification-view/EarnNoBalanceNotificationView'\nimport { EarnTxStatusCardView } from '../earn-tx-status-card-view/EarnTxStatusCardView'\nimport { EarnBytecodeErrorView } from '../earn-bytecode-error-view/EarnBytecodeErrorView'\nimport type { ChainItem } from '../../types/chain-item'\n\n// ============================================================================\n// Props\n// ============================================================================\n\nexport interface EarnDepositFormViewProps {\n // Header / Layout\n headerTitle: string;\n onBack?: () => void;\n progress: number;\n pageTitle: string;\n subtitle: string;\n onSubmit: React.FormEventHandler<HTMLFormElement>;\n\n // Token selector\n selectedToken: { symbol: string; logoURI?: string | null } | null;\n onTokenClick: () => void;\n isLoadingToken: boolean;\n selectTokenLabel: string;\n\n // Chain selector\n chainLabel: string;\n chainImage?: string;\n chainDirectionLabel: string;\n chainDisabledTitle?: string;\n onNetworkClick?: (currentNetworkSelected?: ChainItem | null) => void;\n isNetworkDisabled?: boolean;\n currentNetworkSelected?: ChainItem | null;\n\n // Amount input\n amountValue: string;\n onAmountChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n amountAriaLabel: string;\n dollarAmountFormatted: string;\n availableBalanceFormatted: string;\n\n // No balance notification\n showNoBalanceNotification: boolean;\n noBalancePrompt: string;\n goToSwapLabel: string;\n onGoToSwap: () => void;\n\n // Percentage buttons\n onPercentageClick: (basisPoints: number) => void;\n maxLabel: string;\n\n // TX status (inline card)\n showTxStatus: boolean;\n txStatusLabel: string;\n isTxProcessing: boolean;\n isTxSuccess: boolean;\n isTxError: boolean;\n txSuccessMessage?: string;\n txErrorMessage?: string;\n\n // Bytecode error\n bytecodeErrorMessage?: string;\n transactionErrorLabel: string;\n\n // Quote details\n isQuoteValid: boolean;\n isFetchingQuote: boolean;\n quoteDetails: Array<{ label: string; value: string; borderBottom?: boolean }>;\n\n // Submit button\n submitDisabled: boolean;\n submitButtonText: string;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const EarnDepositFormView: React.FC<EarnDepositFormViewProps> = ({\n // Header / Layout\n headerTitle,\n onBack,\n progress,\n pageTitle,\n subtitle,\n onSubmit,\n\n // Token selector\n selectedToken,\n onTokenClick,\n isLoadingToken,\n selectTokenLabel,\n\n // Chain selector\n chainLabel,\n chainImage,\n chainDirectionLabel,\n chainDisabledTitle,\n onNetworkClick,\n isNetworkDisabled,\n currentNetworkSelected,\n\n // Amount input\n amountValue,\n onAmountChange,\n amountAriaLabel,\n dollarAmountFormatted,\n availableBalanceFormatted,\n\n // No balance notification\n showNoBalanceNotification,\n noBalancePrompt,\n goToSwapLabel,\n onGoToSwap,\n\n // Percentage buttons\n onPercentageClick,\n maxLabel,\n\n // TX status\n showTxStatus,\n txStatusLabel,\n isTxProcessing,\n isTxSuccess,\n isTxError,\n txSuccessMessage,\n txErrorMessage,\n\n // Bytecode error\n bytecodeErrorMessage,\n transactionErrorLabel,\n\n // Quote details\n isQuoteValid,\n isFetchingQuote,\n quoteDetails,\n\n // Submit button\n submitDisabled,\n submitButtonText,\n}) => (\n <BackgroundContainer>\n <DetailsHeader title={headerTitle} onBack={onBack} />\n\n <div className='flex-1 min-h-0 overflow-y-auto'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)] text-[color:var(--deframe-widget-color-text-secondary)] pb-[var(--deframe-widget-size-padding-y-md)]'>\n\n {/* Progress Indicator */}\n <div className='w-full px-[var(--deframe-widget-size-padding-x-md)]'>\n <ProgressIndicator progress={progress} />\n </div>\n\n {/* Strategy Title and Description */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)] px-[var(--deframe-widget-size-padding-x-md)]'>\n <TextHeading variant='h5'>{pageTitle}</TextHeading>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {subtitle}\n </TextBody>\n </div>\n\n <form onSubmit={onSubmit}>\n {/* Amount Input Card */}\n <div className='px-[var(--deframe-widget-size-padding-x-md)]'>\n <SectionCard className='focus-within:bg-[var(--deframe-widget-color-bg-tertiary)] transition-colors'>\n <div className='flex items-center justify-between gap-[var(--deframe-widget-size-gap-md)]'>\n <EarnTokenSelectorView\n selectedToken={selectedToken}\n onTokenClick={onTokenClick}\n isLoading={isLoadingToken}\n selectTokenLabel={selectTokenLabel}\n chainLabel={chainLabel}\n chainImage={chainImage}\n chainDirectionLabel={chainDirectionLabel}\n chainDisabledTitle={chainDisabledTitle}\n onNetworkClick={onNetworkClick}\n isNetworkDisabled={isNetworkDisabled}\n currentNetworkSelected={currentNetworkSelected}\n />\n <EarnAmountInputView\n value={amountValue}\n onChange={onAmountChange}\n ariaLabel={amountAriaLabel}\n dollarAmountFormatted={dollarAmountFormatted}\n availableBalanceFormatted={availableBalanceFormatted}\n />\n </div>\n </SectionCard>\n </div>\n\n {/* No Balance Notification */}\n {showNoBalanceNotification && (\n <EarnNoBalanceNotificationView\n prompt={noBalancePrompt}\n actionLabel={goToSwapLabel}\n onAction={onGoToSwap}\n />\n )}\n\n {/* Percentage Buttons */}\n <EarnPercentageButtonsView\n onPercentageClick={onPercentageClick}\n maxLabel={maxLabel}\n />\n\n {/* Transaction Status & Quote Details */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)] px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-xl)] mt-[var(--deframe-widget-size-gap-md)]'>\n {/* Transaction Status Card */}\n {showTxStatus && (\n <EarnTxStatusCardView\n statusLabel={txStatusLabel}\n isProcessing={isTxProcessing}\n successMessage={isTxSuccess ? txSuccessMessage : undefined}\n errorMessage={isTxError ? txErrorMessage : undefined}\n />\n )}\n\n {/* Bytecode Error State */}\n {bytecodeErrorMessage && (\n <EarnBytecodeErrorView\n errorTitle={transactionErrorLabel}\n errorMessage={bytecodeErrorMessage}\n />\n )}\n\n {/* Quote Details Card */}\n {isQuoteValid && !isFetchingQuote && !bytecodeErrorMessage && (\n <SectionCard>\n {quoteDetails.map((detail, idx) => (\n <InfoRow key={`${detail.label}-${idx}`} borderBottom={detail.borderBottom}>\n <InfoLabel>{detail.label}</InfoLabel>\n <InfoValue>{detail.value}</InfoValue>\n </InfoRow>\n ))}\n </SectionCard>\n )}\n </div>\n\n {/* Deposit Submit Button */}\n <div className='pt-[var(--deframe-widget-size-padding-y-md)] px-[var(--deframe-widget-size-padding-x-md)] w-full'>\n <PrimaryButton\n type='submit'\n className='w-full text-[#252050]'\n disabled={submitDisabled}\n aria-disabled={submitDisabled}\n >\n {submitButtonText}\n </PrimaryButton>\n </div>\n </form>\n </div>\n </div>\n </BackgroundContainer>\n)\n","import React from 'react'\nimport { BackgroundContainer, SectionCard } from '../layout'\nimport { DetailsHeader } from '../details-header'\nimport { ProgressIndicator } from '../progress'\nimport { TextHeading, TextBody } from '../texts'\nimport { SummaryDetails } from '../details'\nimport { PrimaryButton } from '../buttons'\nimport { EarnAmountInputView } from '../earn-amount-input-view/EarnAmountInputView'\nimport { EarnWithdrawTokenSelectorView } from '../earn-withdraw-token-selector-view/EarnWithdrawTokenSelectorView'\nimport { EarnPercentageButtonsView } from '../earn-percentage-buttons-view/EarnPercentageButtonsView'\nimport { EarnPositionCardView } from '../earn-position-card-view/EarnPositionCardView'\nimport { EarnTxStatusCardView } from '../earn-tx-status-card-view/EarnTxStatusCardView'\nimport { EarnBytecodeErrorView } from '../earn-bytecode-error-view/EarnBytecodeErrorView'\nimport type { ChainItem } from '../../types/chain-item'\n\n// ============================================================================\n// Props\n// ============================================================================\n\nexport interface EarnWithdrawFormViewProps {\n // Header / Layout\n headerTitle: string;\n onBack?: () => void;\n progress: number;\n pageTitle: string;\n subtitle: string;\n onSubmit: React.FormEventHandler<HTMLFormElement>;\n\n // Current position card\n positionBalanceUSD: string;\n positionBalanceToken: string;\n strategyIcon?: string;\n strategyName?: string;\n\n // Token selector (what to receive)\n selectedToken: { symbol: string; logoURI?: string | null } | null;\n onTokenClick: () => void;\n selectTokenLabel: string;\n\n // Chain selector\n chainLabel: string;\n chainImage?: string;\n chainDirectionLabel: string;\n chainDisabledTitle?: string;\n onNetworkClick?: (currentNetworkSelected?: ChainItem | null) => void;\n isNetworkDisabled?: boolean;\n currentNetworkSelected?: ChainItem | null;\n\n // Amount input\n amountValue: string;\n onAmountChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n amountAriaLabel: string;\n dollarAmountFormatted: string;\n\n // Percentage buttons\n onPercentageClick: (basisPoints: number) => void;\n maxLabel: string;\n\n // TX status (inline card)\n showTxStatus: boolean;\n txStatusLabel: string;\n isTxProcessing: boolean;\n isTxSuccess: boolean;\n isTxError: boolean;\n txSuccessMessage?: string;\n txErrorMessage?: string;\n\n // Bytecode error\n bytecodeErrorMessage?: string;\n transactionErrorLabel: string;\n\n // Quote details (SummaryDetails)\n isQuoteValid: boolean;\n isFetchingQuote: boolean;\n summaryTitle: string;\n summaryItems: Array<{ label: string; value: string }>;\n\n // Submit button\n submitDisabled: boolean;\n submitButtonText: string;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const EarnWithdrawFormView: React.FC<EarnWithdrawFormViewProps> = ({\n // Header / Layout\n headerTitle,\n onBack,\n progress,\n pageTitle,\n subtitle,\n onSubmit,\n\n // Position card\n positionBalanceUSD,\n positionBalanceToken,\n strategyIcon,\n strategyName,\n\n // Token selector\n selectedToken,\n onTokenClick,\n selectTokenLabel,\n\n // Chain selector\n chainLabel,\n chainImage,\n chainDirectionLabel,\n chainDisabledTitle,\n onNetworkClick,\n isNetworkDisabled,\n currentNetworkSelected,\n\n // Amount input\n amountValue,\n onAmountChange,\n amountAriaLabel,\n dollarAmountFormatted,\n\n // Percentage buttons\n onPercentageClick,\n maxLabel,\n\n // TX status\n showTxStatus,\n txStatusLabel,\n isTxProcessing,\n isTxSuccess,\n isTxError,\n txSuccessMessage,\n txErrorMessage,\n\n // Bytecode error\n bytecodeErrorMessage,\n transactionErrorLabel,\n\n // Quote details\n isQuoteValid,\n isFetchingQuote,\n summaryTitle,\n summaryItems,\n\n // Submit button\n submitDisabled,\n submitButtonText,\n}) => (\n <BackgroundContainer>\n <DetailsHeader title={headerTitle} onBack={onBack} />\n\n <div className='flex-1 min-h-0 overflow-y-auto'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)] text-[color:var(--deframe-widget-color-text-secondary)] pb-[var(--deframe-widget-size-padding-y-md)]'>\n\n {/* Progress Indicator */}\n <div className='w-full px-[var(--deframe-widget-size-padding-x-md)]'>\n <ProgressIndicator progress={progress} />\n </div>\n\n {/* Strategy Title and Description */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)] px-[var(--deframe-widget-size-padding-x-md)]'>\n <TextHeading variant='h5'>{pageTitle}</TextHeading>\n <TextBody variant='text-small'>\n {subtitle}\n </TextBody>\n </div>\n\n <form onSubmit={onSubmit}>\n {/* User's Current Position Card */}\n <EarnPositionCardView\n balanceUSD={positionBalanceUSD}\n balanceToken={positionBalanceToken}\n icon={strategyIcon}\n iconAlt={strategyName}\n />\n\n {/* Withdrawal Amount Input Card */}\n <div className='px-[var(--deframe-widget-size-padding-x-md)] mt-[var(--deframe-widget-size-gap-sm)]'>\n <SectionCard className='focus-within:bg-[var(--deframe-widget-color-bg-tertiary)] transition-colors'>\n <div className='flex items-center justify-between gap-[var(--deframe-widget-size-gap-md)]'>\n <EarnWithdrawTokenSelectorView\n selectedToken={selectedToken}\n onTokenClick={onTokenClick}\n selectTokenLabel={selectTokenLabel}\n chainLabel={chainLabel}\n chainImage={chainImage}\n chainDirectionLabel={chainDirectionLabel}\n chainDisabledTitle={chainDisabledTitle}\n onNetworkClick={onNetworkClick}\n isNetworkDisabled={isNetworkDisabled}\n currentNetworkSelected={currentNetworkSelected}\n />\n <EarnAmountInputView\n value={amountValue}\n onChange={onAmountChange}\n ariaLabel={amountAriaLabel}\n dollarAmountFormatted={dollarAmountFormatted}\n />\n </div>\n </SectionCard>\n </div>\n\n {/* Percentage Buttons */}\n <EarnPercentageButtonsView\n onPercentageClick={onPercentageClick}\n maxLabel={maxLabel}\n />\n\n {/* Transaction Status & Quote Details */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)] px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-xl)] mt-[var(--deframe-widget-size-gap-md)]'>\n {/* Transaction Status Card */}\n {showTxStatus && (\n <EarnTxStatusCardView\n statusLabel={txStatusLabel}\n isProcessing={isTxProcessing}\n successMessage={isTxSuccess ? txSuccessMessage : undefined}\n errorMessage={isTxError ? txErrorMessage : undefined}\n />\n )}\n\n {/* Bytecode Error State */}\n {bytecodeErrorMessage && (\n <EarnBytecodeErrorView\n errorTitle={transactionErrorLabel}\n errorMessage={bytecodeErrorMessage}\n />\n )}\n\n {/* Details Card (Collapsible) */}\n {isQuoteValid && !isFetchingQuote && !bytecodeErrorMessage && (\n <SummaryDetails\n title={summaryTitle}\n items={summaryItems}\n defaultOpen={false}\n className='bg-[var(--deframe-widget-color-bg-secondary)]'\n />\n )}\n </div>\n\n {/* Withdraw Submit Button */}\n <div className='pt-[var(--deframe-widget-size-padding-y-md)] px-[var(--deframe-widget-size-padding-x-md)] w-full'>\n <PrimaryButton\n type='submit'\n className='w-full'\n disabled={submitDisabled}\n aria-disabled={submitDisabled}\n >\n {submitButtonText}\n </PrimaryButton>\n </div>\n </form>\n </div>\n </div>\n </BackgroundContainer>\n)\n","import React from 'react'\nimport { TransactionScreen, TransactionScreenInvestmentCard } from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnDepositProcessingViewProps {\n progress: number;\n title: string;\n descriptionPrefix: string;\n activityHistoryText: string;\n onGoToHistory: () => void;\n onBack: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnDepositProcessingView: React.FC<EarnDepositProcessingViewProps> = ({\n progress,\n title,\n descriptionPrefix,\n activityHistoryText,\n onGoToHistory,\n onBack,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='processing'\n title={title}\n description={\n <>\n {descriptionPrefix}{' '}\n <span\n className='[font-weight:var(--deframe-widget-font-weight-semibold)] underline underline-offset-2 cursor-pointer text-[color:var(--deframe-widget-color-brand-primary)]'\n onClick={onGoToHistory}\n >\n {activityHistoryText}\n </span>\n </>\n }\n onBack={onBack}\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { TransactionScreen, TransactionScreenInvestmentCard } from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnDepositSuccessViewProps {\n title: string;\n descriptionPrefix: string;\n formattedAmount: string;\n tokenSymbol: string;\n descriptionSuffix: string;\n descriptionLinkText: string;\n onClose: () => void;\n exploreMoreLabel: string;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnDepositSuccessView: React.FC<EarnDepositSuccessViewProps> = ({\n title,\n descriptionPrefix,\n formattedAmount,\n tokenSymbol,\n descriptionSuffix,\n descriptionLinkText,\n onClose,\n exploreMoreLabel,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={100}\n iconType='success'\n title={title}\n description={\n <>\n {descriptionPrefix}\n <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)]'> {formattedAmount} {tokenSymbol} </strong>\n {descriptionSuffix}{' '}\n <strong\n className='[font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-brand-primary)] cursor-pointer'\n onClick={onClose}\n >\n {descriptionLinkText}\n </strong>\n </>\n }\n onClose={onClose}\n actions={\n <PrimaryButton className='w-full' onClick={onClose}>\n {exploreMoreLabel}\n </PrimaryButton>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { TransactionScreen, TransactionScreenInvestmentCard } from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnDepositWarningViewProps {\n progress: number;\n title: string;\n description: string;\n backTitle: string;\n onBack: () => void;\n cancelLabel: string;\n onCancel: () => void;\n retryLabel: string;\n onRetry: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnDepositWarningView: React.FC<EarnDepositWarningViewProps> = ({\n progress,\n title,\n description,\n backTitle,\n onBack,\n cancelLabel,\n onCancel,\n retryLabel,\n onRetry,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='warning'\n title={title}\n description={description}\n onBack={onBack}\n backTitle={backTitle}\n actions={\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton className='flex-1' onClick={onCancel}>\n {cancelLabel}\n </SecondaryButton>\n <PrimaryButton className='flex-1' onClick={onRetry}>\n {retryLabel}\n </PrimaryButton>\n </div>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { TransactionScreen, TransactionScreenInvestmentCard } from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnDepositFailedViewProps {\n progress: number;\n title: string;\n description: string;\n backTitle: string;\n onBack: () => void;\n viewExplorerLabel: string;\n onViewExplorer: () => void;\n viewExplorerDisabled: boolean;\n retryLabel: string;\n onRetry: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n iconGradient: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnDepositFailedView: React.FC<EarnDepositFailedViewProps> = ({\n progress,\n title,\n description,\n backTitle,\n onBack,\n viewExplorerLabel,\n onViewExplorer,\n viewExplorerDisabled,\n retryLabel,\n onRetry,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n iconGradient,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='warning'\n iconGradient={iconGradient}\n title={title}\n description={description}\n onBack={onBack}\n backTitle={backTitle}\n actions={\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton className='flex-1' onClick={onViewExplorer} disabled={viewExplorerDisabled}>\n {viewExplorerLabel}\n </SecondaryButton>\n <PrimaryButton className='flex-1' onClick={onRetry}>\n {retryLabel}\n </PrimaryButton>\n </div>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport {\n TransactionScreen,\n TransactionScreenInvestmentCard,\n} from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnWithdrawProcessingViewProps {\n progress: number;\n title: string;\n descriptionPrefix: string;\n activityHistoryText: string;\n descriptionSuffix?: string;\n onGoToHistory: () => void;\n onBack: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnWithdrawProcessingView: React.FC<EarnWithdrawProcessingViewProps> = ({\n progress,\n title,\n descriptionPrefix,\n activityHistoryText,\n descriptionSuffix,\n onGoToHistory,\n onBack,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='processing'\n title={title}\n description={\n <>\n {descriptionPrefix}{' '}\n <span\n className='[font-weight:var(--deframe-widget-font-weight-semibold)] underline underline-offset-2 cursor-pointer text-[color:var(--deframe-widget-color-brand-primary)]'\n onClick={onGoToHistory}\n >\n {activityHistoryText}\n </span>{' '}\n {descriptionSuffix}\n </>\n }\n onBack={onBack}\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport {\n TransactionScreen,\n TransactionScreenInvestmentCard,\n} from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnWithdrawSuccessViewProps {\n title: string;\n descriptionPrefix: string;\n formattedAmount: string;\n tokenSymbol: string;\n descriptionSuffix: string;\n descriptionLinkText: string;\n onClose: () => void;\n exploreMoreLabel: string;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnWithdrawSuccessView: React.FC<EarnWithdrawSuccessViewProps> = ({\n title,\n descriptionPrefix,\n formattedAmount,\n tokenSymbol,\n descriptionSuffix,\n descriptionLinkText,\n onClose,\n exploreMoreLabel,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={100}\n iconType='success'\n title={title}\n description={\n <>\n {descriptionPrefix}\n <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)]'> {formattedAmount} {tokenSymbol} </strong>\n {descriptionSuffix}{' '}\n <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-brand-primary)]'>{descriptionLinkText}</strong>\n </>\n }\n onClose={onClose}\n actions={\n <PrimaryButton className='w-full' onClick={onClose}>\n {exploreMoreLabel}\n </PrimaryButton>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport {\n TransactionScreen,\n TransactionScreenInvestmentCard,\n} from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnWithdrawWarningViewProps {\n progress: number;\n title: string;\n description: string;\n backTitle: string;\n onBack: () => void;\n cancelLabel: string;\n onCancel: () => void;\n retryLabel: string;\n onRetry: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnWithdrawWarningView: React.FC<EarnWithdrawWarningViewProps> = ({\n progress,\n title,\n description,\n backTitle,\n onBack,\n cancelLabel,\n onCancel,\n retryLabel,\n onRetry,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='warning'\n title={title}\n description={description}\n onBack={onBack}\n backTitle={backTitle}\n actions={\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton className='flex-1' onClick={onCancel}>\n {cancelLabel}\n </SecondaryButton>\n <PrimaryButton className='flex-1' onClick={onRetry}>\n {retryLabel}\n </PrimaryButton>\n </div>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport {\n TransactionScreen,\n TransactionScreenInvestmentCard,\n} from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnWithdrawFailedViewProps {\n progress: number;\n title: string;\n description: string;\n backTitle: string;\n onBack: () => void;\n viewExplorerLabel: string;\n onViewExplorer: () => void;\n viewExplorerDisabled: boolean;\n retryLabel: string;\n onRetry: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n iconGradient: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnWithdrawFailedView: React.FC<EarnWithdrawFailedViewProps> = ({\n progress,\n title,\n description,\n backTitle,\n onBack,\n viewExplorerLabel,\n onViewExplorer,\n viewExplorerDisabled,\n retryLabel,\n onRetry,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n iconGradient,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='warning'\n iconGradient={iconGradient}\n title={title}\n description={description}\n onBack={onBack}\n backTitle={backTitle}\n actions={\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton className='flex-1' onClick={onViewExplorer} disabled={viewExplorerDisabled}>\n {viewExplorerLabel}\n </SecondaryButton>\n <PrimaryButton className='flex-1' onClick={onRetry}>\n {retryLabel}\n </PrimaryButton>\n </div>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n"]}
1
+ {"version":3,"sources":["../src/stories/buttons/action-button/ActionButton.tsx","../src/stories/buttons/close-button/CloseButton.tsx","../src/stories/buttons/percentage-button/PercentageButton.tsx","../src/stories/buttons/primary-button/PrimaryButton.tsx","../src/stories/buttons/secondary-button/SecondaryButton.tsx","../src/stories/buttons/tertiary-button/TertiaryButton.tsx","../src/stories/inputs/InputCompund.tsx","../src/stories/texts/Link.tsx","../src/stories/inputs/Input.tsx","../src/stories/lists/List.tsx","../src/stories/lists/ListCompound.tsx","../src/stories/lists/wallet-list/WalletListContainer.tsx","../src/stories/lists/wallet-list/WalletItem.tsx","../src/stories/lists/wallet-list/WalletList.tsx","../src/stories/lists/wallet-list/WalletConnectPanel.tsx","../src/stories/currency/Currency.tsx","../src/stories/texts/Text.tsx","../src/stories/texts/TextAccent.tsx","../src/stories/texts/TextBody.tsx","../src/stories/texts/TextHeading.tsx","../src/stories/texts/Title.tsx","../src/stories/tabs/Tabs.tsx","../src/stories/select/Select.tsx","../src/stories/loading/Skeleton.tsx","../src/stories/banner/BannerNotificationCompound.tsx","../src/stories/banner/BannerNotification.tsx","../src/stories/address/AddressDisplay.tsx","../src/stories/details/SummaryDetails.tsx","../src/stories/details/SummaryDetailsCryptoControlV2.tsx","../src/stories/action-sheet/ActionSheet.tsx","../src/stories/providers/DeframeComponentsProvider.tsx","../src/stories/info-display/InfoRow.tsx","../src/stories/info-display/InfoLabel.tsx","../src/stories/info-display/InfoValue.tsx","../src/stories/info-display/InfoRowWithIcon.tsx","../src/stories/info-display/InfoRowIconLabel.tsx","../src/stories/info-display/InfoRowIconValue.tsx","../src/stories/info-display/CollapsibleInfoRow.tsx","../src/stories/layout/BackgroundContainer.tsx","../src/stories/layout/SectionCard.tsx","../src/stories/layout/Navbar.tsx","../src/stories/layout/FlexCol.tsx","../src/stories/layout/FlexRow.tsx","../src/stories/layout/ScrollableContent.tsx","../src/stories/details-header/DetailsHeader.tsx","../src/stories/badges/HighRiskBadge.tsx","../src/stories/badges/MediumRiskBadge.tsx","../src/stories/badges/LowRiskBadge.tsx","../src/stories/loading-dots/LoadingDots.tsx","../src/stories/processing-badge/ProcessingBadge.tsx","../src/stories/history-details/HistoryDetailsComponents.tsx","../src/stories/transaction-processing-details/StepStatusIcon.tsx","../src/stories/transaction-processing-details/StepStatusText.tsx","../src/stories/transaction-processing-details/StepDisplay.tsx","../src/stories/transaction-processing-details/TransactionProcessingDetails.tsx","../src/stories/history-details/HistoryDepositDetailsView.tsx","../src/stories/history-details/HistoryWithdrawDetailsView.tsx","../src/stories/swap-amount-input/SwapAmountInputView.tsx","../src/stories/choose-strategy-actionsheet/ChooseAStrategyActionsheetView.tsx","../src/stories/strategy-details/StrategyDetailsView.tsx","../src/stories/progress/ProgressIndicator.tsx","../src/stories/search-input/SearchInput.tsx","../src/stories/search-empty-state/SearchEmptyState.tsx","../src/stories/collapsible-section/CollapsibleSection.tsx","../src/stories/transaction-screen-icon/TransactionScreenIcon.tsx","../src/stories/transaction-screen/TransactionScreen.tsx","../src/stories/transaction-screen-investment-card/TransactionScreenInvestmentCard.tsx","../src/stories/token-with-chain-badge/TokenWithChainBadge.tsx","../src/stories/swap-processing-view/SwapProcessingView.tsx","../src/stories/swap-form-view/constants.ts","../src/stories/swap-form-view/SwapFormSkeleton.tsx","../src/stories/swap-processing-view/SwapProcessingViewSimple.tsx","../src/stories/swap-crosschain-processing-view/SwapCrossChainProcessingView.tsx","../src/stories/investment-crosschain-processing-view/InvestmentCrossChainProcessingView.tsx","../src/stories/swap-signature-warning-view/SwapSignatureWarningView.tsx","../src/stories/swap-signature-warning-view/SwapSignatureWarningViewSimple.tsx","../src/stories/swap-success-view/SwapSuccessView.tsx","../src/stories/swap-success-view/SwapSuccessViewSimple.tsx","../src/stories/swap-transaction-failed-view/SwapTransactionFailedView.tsx","../src/stories/swap-transaction-failed-view/SwapTransactionFailedViewSimple.tsx","../src/stories/choose-an-asset-swap-view/ChooseAnAssetSwapView.tsx","../src/stories/swap-token-selector/SwapTokenSelectorView.tsx","../src/stories/swap-network-selector/SwapNetworkSelectorView.tsx","../src/stories/swap-from-card-view/SwapFromCardView.tsx","../src/stories/swap-output-amount/SwapOutputAmountView.tsx","../src/stories/swap-to-card-view/SwapToCardView.tsx","../src/stories/swap-slippage-tolerance-buttons/SwapSlippageToleranceButtonsView.tsx","../src/stories/swap-advanced-settings-view/SwapAdvancedSettingsView.tsx","../src/stories/swap-quote-header/SwapQuoteHeaderView.tsx","../src/stories/swap-quote-blockchain-costs/SwapQuoteBlockchainCostsView.tsx","../src/stories/swap-quote-errors/SwapQuoteErrorsView.tsx","../src/stories/swap-quote-details-view/SwapQuoteDetailsView.tsx","../src/stories/confirm-swap-button-view/ConfirmSwapButtonView.tsx","../src/stories/swap-form-view/SwapFormView.tsx","../src/stories/swap-from-card-view/SwapFromCardViewSimple.tsx","../src/stories/swap-to-card-view/SwapToCardViewSimple.tsx","../src/stories/confirm-swap-button-view/ConfirmSwapButtonViewSimple.tsx","../src/stories/swap-form-view/SwapFormViewSimple.tsx","../src/stories/choose-a-network-view/ChooseANetworkView.tsx","../src/utils/useIsMobile.ts","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/CloseButtonInline.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/IconCircle.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/hasSignificantBalance.ts","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/NetworkRow.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/NetworkChip.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/SearchInputInline.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/AssetRowInline.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/TokensLoadingState.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/AssetSearchAndList.tsx","../src/stories/choose-network-and-asset-view/ChooseNetworkAndAssetViewSimple/ChooseNetworkAndAssetViewSimple.tsx","../src/stories/swap-history-view/LoadingSkeleton.tsx","../src/stories/swap-history-view/EmptyState.tsx","../src/stories/swap-history-view/SwapItemIcon.tsx","../src/stories/swap-history-view/SwapHistoryView.tsx","../src/stories/history-swap-details-view/HistorySwapDetailsView.tsx","../src/stories/swap-widget-fallback-view/SwapWidgetFallbackView.tsx","../src/stories/apy-range/ApyRange.tsx","../src/stories/label/Label.tsx","../src/stories/history-list-skeleton/HistoryListSkeleton.tsx","../src/stories/wallet-balances/WalletBalances.tsx","../src/stories/history-tab-empty/HistoryTabEmpty.tsx","../src/stories/strategy-grid-card/StrategyGridCard.tsx","../src/stories/back-button/BackButton.tsx","../src/stories/earn-balance-card/EarnBalanceCard.tsx","../src/stories/earn-investment-summary-view/EarnInvestmentSummaryView.tsx","../src/stories/earn-invested-section-view/EarnInvestedSectionView.tsx","../src/stories/earn-explore-grid-view/EarnExploreGridView.tsx","../src/stories/earn-recent-transactions-view/EarnRecentTransactionsView.tsx","../src/stories/earn-desktop-view/EarnDesktopView.tsx","../src/stories/earn-investment-details-view/EarnInvestmentDetailsView.tsx","../src/stories/grouped-strategy-list-view/GroupedStrategyListView.tsx","../src/stories/history-list-view/DateLabel.tsx","../src/stories/history-list-view/ArrowBadge.tsx","../src/stories/history-list-view/TokenIconWithBadge.tsx","../src/stories/history-list-view/SwapIconWithBadge.tsx","../src/stories/history-list-view/AmountDisplay.tsx","../src/stories/history-list-view/HistoryListView.tsx","../src/stories/earn-token-selector-view/EarnTokenSelectorView.tsx","../src/stories/earn-amount-input-view/EarnAmountInputView.tsx","../src/stories/earn-percentage-buttons-view/EarnPercentageButtonsView.tsx","../src/stories/earn-withdraw-token-selector-view/EarnWithdrawTokenSelectorView.tsx","../src/stories/earn-no-balance-notification-view/EarnNoBalanceNotificationView.tsx","../src/stories/earn-tx-status-card-view/EarnTxStatusCardView.tsx","../src/stories/earn-bytecode-error-view/EarnBytecodeErrorView.tsx","../src/stories/earn-position-card-view/EarnPositionCardView.tsx","../src/stories/earn-deposit-form-view/EarnDepositFormView.tsx","../src/stories/earn-withdraw-form-view/EarnWithdrawFormView.tsx","../src/stories/earn-deposit-processing-view/EarnDepositProcessingView.tsx","../src/stories/earn-deposit-success-view/EarnDepositSuccessView.tsx","../src/stories/earn-deposit-warning-view/EarnDepositWarningView.tsx","../src/stories/earn-deposit-failed-view/EarnDepositFailedView.tsx","../src/stories/earn-withdraw-processing-view/EarnWithdrawProcessingView.tsx","../src/stories/earn-withdraw-success-view/EarnWithdrawSuccessView.tsx","../src/stories/earn-withdraw-warning-view/EarnWithdrawWarningView.tsx","../src/stories/earn-withdraw-failed-view/EarnWithdrawFailedView.tsx","../src/stories/dashboard-card/DashboardCard.tsx","../src/stories/dashboard-transactions-placeholder/DashboardTransactionsPlaceholder.tsx","../src/stories/dashboard-balances-breakdown/DashboardBalancesBreakdown.tsx","../src/stories/dashboard-token-list-view/DashboardTokenListView.tsx","../src/stories/dashboard-strategies-list-view/DashboardStrategiesListView.tsx","../src/stories/dashboard-portfolio-view/DashboardPortfolioView.tsx","../src/stories/dashboard-tokens-view/DashboardTokensView.tsx","../src/stories/dashboard-recent-transactions-view/DashboardRecentTransactionsView.tsx","../src/stories/dashboard-investment-opportunities-view/DashboardInvestmentOpportunitiesView.tsx","../src/stories/dashboard-view/DashboardView.tsx"],"names":["twMerge","jsx","HiXMark","Input","jsxs","React","React2","React3","React4","React5","motion","React6","AnimatePresence","React7","MdInfoOutline","MdWarningAmber","MdErrorOutline","MdCheckCircleOutline","MdClose","React8","React9","React10","HiChevronUp","HiChevronDown","gapClasses","HiChevronLeft","HiOutlineClock","IoCheckmarkOutline","IoTimeOutline","IoAlertCircleOutline","textColorClass","HiArrowRight","useState","useEffect","MdOutlineSearch","MdOutlineSearchOff","Fragment","MdOutlineSwapHoriz","MdHistory","MdOutlineSwapVert","useRef","useCallback","TokenIcon","IconCircle","React21","React22","React23","_a","PiClockCountdownBold","MdArrowUpward","HiArrowLeft","MdArrowRight","MdArrowDownward","TokenIconWithBadge","MdArrowDropDown","MdQrCodeScanner","Link","MdOutlineArrowUpward","MdOutlineArrowDownward"],"mappings":"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","file":"index.js","sourcesContent":["import { twMerge } from 'tailwind-merge'\nimport type { ButtonProps } from '../index'\n\n/** Primary UI component for user interaction */\nexport default function ActionButton ({\n children,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}: ButtonProps) {\n const baseClasses = [\n 'flex-1 inline-flex items-center justify-center overflow-hidden',\n 'h-[var(--deframe-widget-font-leading-lg)]',\n 'px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border border-[color:var(--deframe-widget-color-border-tertiary)]',\n 'font-[var(--deframe-widget-font-family)] [font-size:var(--deframe-widget-font-size-lg)] [line-height:var(--deframe-widget-font-leading-lg)] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'transition-[background,border-color,box-shadow,opacity] duration-200',\n 'focus:outline-none focus:ring-2 focus:ring-[color:var(--deframe-widget-color-brand-primary)]',\n ].join(' ')\n\n const stateClasses = disabled\n ? [\n 'cursor-not-allowed',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n ].join(' ')\n : [\n 'cursor-pointer',\n 'bg-[var(--deframe-widget-color-brand-primary)]',\n 'text-[color:var(--deframe-widget-color-text-primary-dark)]',\n 'hover:opacity-90',\n 'hover:shadow-[0_2px_8px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_18%,transparent)]',\n ].join(' ')\n\n const containerClasses = twMerge(\n baseClasses,\n stateClasses,\n className\n )\n\n return (\n <button\n type={type}\n className={containerClasses}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n","import React from 'react'\nimport { HiXMark } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface CloseButtonProps {\n /** Click handler for the close button */\n onClick?: () => void;\n /** Test ID for testing purposes */\n testId?: string;\n /** ARIA label for accessibility */\n ariaLabel?: string;\n /** Additional CSS class names */\n className?: string;\n}\n\nconst CloseButton: React.FC<CloseButtonProps> = ({ onClick, testId, ariaLabel = 'Close', className }) => {\n const baseClasses = 'w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-brand-primary)] transition-colors cursor-pointer'\n\n return (\n <button\n data-test-id={testId ?? 'close-button'}\n onClick={onClick}\n className={twMerge(baseClasses, className)}\n aria-label={ariaLabel}\n >\n <HiXMark className='w-6 h-6' />\n </button>\n )\n}\n\nexport default CloseButton\n","import { twMerge } from 'tailwind-merge'\nimport type { ButtonProps } from '../index'\n\n/** Primary UI component for user interaction */\nexport default function PercentageButton ({\n children,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}: ButtonProps) {\n const containerClasses = twMerge(\n 'flex-1 inline-flex items-center justify-center',\n 'px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border border-[color:var(--deframe-widget-color-border-tertiary)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)] text-[color:var(--deframe-widget-color-text-secondary)]',\n 'font-[var(--deframe-widget-font-family)] [font-size:var(--deframe-widget-font-size-lg)] [line-height:var(--deframe-widget-font-leading-lg)] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'hover:border-[color:var(--deframe-widget-color-border-secondary)] focus:outline-none focus:ring-2 focus:ring-[color:var(--deframe-widget-color-brand-primary)]',\n disabled && 'cursor-not-allowed',\n className\n )\n\n return (\n <button\n type={type}\n className={containerClasses}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { ButtonProps } from '../index'\n\n/** Primary UI component for user interaction - uses brand-primary color for theming */\nexport default function PrimaryButton ({\n children,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}: ButtonProps) {\n /** base button classes */\n const baseClasses = [\n /** layout */\n 'overflow-hidden w-full flex items-center justify-center transition-all duration-200',\n /** typography */\n 'font-[var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n /** spacing */\n 'px-[var(--deframe-widget-size-padding-x-xl)]',\n 'py-[var(--deframe-widget-size-padding-y-md)]',\n /** container */\n 'rounded-[var(--deframe-widget-size-radius-xs)]',\n 'border-solid border-[length:var(--deframe-widget-size-border-xs)]',\n 'gap-[var(--deframe-widget-size-gap-sm)]'\n ].join(' ')\n\n const stateClasses = {\n /** enabled state */\n enabled: [\n 'hover:opacity-90',\n 'text-[color:var(--deframe-widget-color-text-inverse)]',\n 'bg-[var(--deframe-widget-color-brand-primary)]',\n 'border-[color:var(--deframe-widget-color-border-primary)]',\n 'cursor-pointer'\n ].join(' '),\n /** disabled state */\n disabled: [\n 'text-[color:var(--deframe-widget-color-text-inverse-disabled)]',\n 'bg-[var(--deframe-widget-color-brand-primary-disabled)]',\n 'border-[color:var(--deframe-widget-color-border-primary-disabled)]',\n 'cursor-not-allowed'\n ].join(' '),\n } as const\n\n /** button classes merge */\n const buttonClasses = twMerge(\n baseClasses,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <button\n data-slot='primary-button'\n data-test-id='primary-button'\n aria-label='primary action'\n type={type}\n className={buttonClasses}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { ButtonProps } from '../index'\n\n/** Secondary UI component for user interaction - outline style using brand-primary color */\nexport default function SecondaryButton ({\n children,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}: ButtonProps) {\n /** base button classes */\n const baseClasses = [\n /** layout */\n 'overflow-hidden w-full flex items-center justify-center transition-all duration-200',\n /** typography */\n 'font-[var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n /** spacing */\n 'px-[var(--deframe-widget-size-padding-x-xl)]',\n 'py-[var(--deframe-widget-size-padding-y-md)]',\n /** container */\n 'bg-transparent',\n 'rounded-[var(--deframe-widget-size-radius-xs)]',\n 'border-solid border-[length:var(--deframe-widget-size-border-xs)]',\n 'gap-[var(--deframe-widget-size-gap-sm)]',\n ].join(' ')\n\n /** state classes map */\n const stateClasses = {\n enabled: [\n 'text-[color:var(--deframe-widget-color-brand-primary)]',\n 'border-[color:var(--deframe-widget-color-brand-primary)]',\n 'hover:opacity-90',\n 'cursor-pointer',\n ].join(' '),\n disabled: [\n 'text-[color:var(--deframe-widget-color-brand-primary-disabled)]',\n 'border-[color:var(--deframe-widget-color-brand-primary-disabled)]',\n 'cursor-not-allowed',\n ].join(' '),\n } as const\n\n /** button classes merge */\n const buttonClasses = twMerge(\n baseClasses,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <button\n data-slot='secondary-button'\n data-test-id='secondary-button'\n aria-label='secondary action'\n type={type}\n className={buttonClasses}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { ButtonProps } from '../index'\n\n/** Tertiary UI component for user interaction - ghost style using brand-tertiary color */\nexport default function TertiaryButton ({\n children,\n disabled = false,\n className = '',\n type = 'button',\n ...props\n}: ButtonProps) {\n /** base button classes */\n const baseClasses = [\n /** layout */\n 'overflow-hidden w-full flex items-center justify-center transition-all duration-200',\n /** typography */\n 'font-[var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n /** spacing */\n 'px-[var(--deframe-widget-size-padding-x-xl)]',\n 'py-[var(--deframe-widget-size-padding-y-md)]',\n /** container */\n 'bg-transparent border-none',\n 'rounded-[var(--deframe-widget-size-radius-xs)]',\n 'gap-[var(--deframe-widget-size-gap-sm)]',\n ].join(' ')\n\n /** state classes map */\n const stateClasses = {\n enabled: [\n 'text-[color:var(--deframe-widget-color-text-tertiary)]',\n 'hover:opacity-90',\n 'cursor-pointer',\n ].join(' '),\n disabled: [\n 'text-[color:var(--deframe-widget-color-text-tertiary-disabled)]',\n 'cursor-not-allowed',\n ].join(' '),\n } as const\n\n /** button classes merge */\n const buttonClasses = twMerge(\n baseClasses,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <button\n data-slot='tertiary-button'\n data-test-id='tertiary-button'\n aria-label='tertiary action'\n type={type}\n className={buttonClasses}\n disabled={disabled}\n {...props}\n >\n {children}\n </button>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { ComponentProps } from 'react'\n\nexport interface InputProps extends ComponentProps<'div'> {}\n\nexport function Input ({ className = '', ...props }: InputProps) {\n const baseClasses = [\n 'flex flex-col',\n '[gap:var(--deframe-widget-size-gap-xs)]',\n ].join(' ')\n\n return (\n <div\n data-slot='input'\n data-test-id='input'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n\nexport function InputLabel ({ className = '', ...props }: ComponentProps<'label'>) {\n const baseClasses = [\n '[font-family:var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-xs)]',\n '[font-weight:var(--deframe-widget-font-weight-medium)]',\n 'text-[var(--deframe-widget-color-text-primary)]',\n ].join(' ')\n\n return (\n <label\n data-slot='input-label'\n data-test-id='input-label'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n\nexport interface InputFieldProps extends ComponentProps<'input'> {\n hasError?: boolean\n}\n\nexport function InputField ({ hasError = false, disabled, className = '', ...props }: InputFieldProps) {\n const baseClasses = [\n 'w-full',\n '[font-family:var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'text-[var(--deframe-widget-color-text-primary)]',\n 'placeholder-[var(--deframe-widget-color-placeholder-primary)]',\n 'border-[length:var(--deframe-widget-size-border-xs)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'px-[var(--deframe-widget-size-padding-x-md)]',\n 'py-[var(--deframe-widget-size-padding-y-sm)]',\n 'outline-none',\n 'transition-colors',\n ].join(' ')\n\n const stateClasses = {\n default: [\n 'border border-[var(--deframe-widget-color-border-primary)]',\n 'bg-[var(--deframe-widget-color-bg-raised)]'\n ].join(' '),\n error: [\n 'border border-[var(--deframe-widget-color-state-error)]',\n 'bg-[var(--deframe-widget-color-bg-raised)]'\n ].join(' '),\n disabled: [\n 'border',\n 'border-[var(--deframe-widget-color-border-primary-disabled)]',\n 'bg-[var(--deframe-widget-color-bg-raised-disabled)]',\n 'opacity-60',\n 'cursor-not-allowed',\n ].join(' '),\n } as const\n\n const stateKey = hasError ? 'error' : disabled ? 'disabled' : 'default'\n const fieldClasses = twMerge(baseClasses, stateClasses[stateKey], className)\n\n return (\n <input\n data-slot='input-field'\n data-test-id='input-field'\n aria-invalid={hasError || undefined}\n disabled={disabled}\n className={fieldClasses}\n {...props}\n />\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { LinkProps } from './index'\n\nexport function Link ({\n children,\n href,\n className = '',\n target = '_blank',\n disabled = false,\n prefetch: _prefetch,\n replace: _replace,\n scroll: _scroll,\n ...props\n}: LinkProps) {\n const baseClasses = [\n '[font-family:var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[font-weight:var(--deframe-widget-font-weight-medium)]',\n '[line-height:var(--deframe-widget-font-leading-lg)]',\n ].join(' ')\n\n const stateClasses = {\n enabled: [\n 'text-[color:var(--deframe-widget-color-text-primary)]',\n 'hover:underline',\n 'cursor-pointer',\n ].join(' '),\n disabled: [\n 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n 'cursor-not-allowed',\n 'pointer-events-none',\n ].join(' '),\n } as const\n\n const linkClasses = twMerge(\n baseClasses,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n if (disabled) {\n return (\n <span\n data-slot='link'\n data-test-id='link'\n aria-disabled\n className={linkClasses}\n >\n {children}\n </span>\n )\n }\n\n return (\n <a\n href={href}\n target={target}\n data-slot='link'\n data-test-id='link'\n className={linkClasses}\n rel={target === '_blank' ? 'noopener noreferrer' : undefined}\n {...props}\n >\n {children}\n </a>\n )\n}\n\nexport default Link\n","import { Input as InputRoot, InputLabel, InputField } from './InputCompund'\nimport Link from '../texts/Link'\nimport type { InputProps } from './index'\n\nexport function Input ({\n label,\n error,\n placeholder,\n type = 'text',\n repassword = 'Forgot password?',\n href = '/',\n disabled,\n className = '',\n ...props\n}: InputProps) {\n const hasError = !!error\n\n return (\n <InputRoot className={className}>\n {label && <InputLabel>{label}</InputLabel>}\n <InputField\n type={type}\n placeholder={placeholder}\n disabled={disabled}\n hasError={hasError}\n aria-label={label}\n {...props}\n />\n {type === 'password' && (\n <div\n data-slot='input-repassword'\n data-test-id='input-repassword'\n className='text-right'\n >\n <Link href={href} disabled={disabled}>\n {repassword}\n </Link>\n </div>\n )}\n {error && (\n <p className='mt-[var(--deframe-widget-size-gap-xs)] text-[color:var(--deframe-widget-color-state-error)] [font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]'>\n {error}\n </p>\n )}\n </InputRoot>\n )\n}\n\nexport default Input\n","import { twMerge } from 'tailwind-merge'\nimport type { ListItemProps } from './index'\n\nexport function ListItem ({\n children,\n className,\n containerClassName,\n onClick,\n ...props\n}: ListItemProps) {\n const containerClasses = twMerge(\n 'self-stretch min-h-16 relative rounded-[var(--deframe-widget-size-radius-sm)] border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'text-[color:var(--deframe-widget-color-text-primary)] flex flex-col justify-center items-center transition-colors',\n 'hover:border-[color:var(--deframe-widget-color-border-primary)] bg-[var(--deframe-widget-color-bg-secondary)]',\n onClick && 'cursor-pointer',\n containerClassName\n )\n\n return (\n <div className={containerClasses} onClick={onClick}>\n <div\n className={twMerge(\n 'self-stretch inline-flex justify-between items-center',\n 'gap-[var(--deframe-widget-size-gap-md)]',\n 'px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-sm)]',\n 'text-[color:var(--deframe-widget-color-text-primary)]',\n className\n )}\n >\n {children}\n </div>\n </div>\n )\n}\n\nexport const ListItemLeftSide: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => {\n return (\n <div\n className={twMerge('flex justify-center items-center text-[color:var(--deframe-widget-color-text-primary)]', className)}\n >\n {children}\n </div>\n )\n}\n\nexport const ListItemContent: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => {\n return (\n <div\n className={twMerge(\n 'flex-1 self-stretch inline-flex flex-col justify-center items-start overflow-hidden text-[color:var(--deframe-widget-color-text-primary)]',\n className\n )}\n >\n {children}\n </div>\n )\n}\n\nexport const ListItemRightSide: React.FC<{\n children: React.ReactNode;\n className?: string;\n}> = ({ children, className }) => {\n return (\n <div\n className={twMerge(\n 'flex flex-col justify-start items-end text-[color:var(--deframe-widget-color-text-primary)]',\n className\n )}\n >\n {children}\n </div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { ListContainerProps, ListItemContentProps, ListItemLeftSideProps, ListItemRightSideProps } from './index'\n\nexport function ListContainer ({ className, ...props }: ListContainerProps) {\n const baseClasses = [\n 'flex flex-col list-none',\n '[gap:var(--deframe-widget-size-gap-sm)]',\n ].join(' ')\n\n return (\n <ul\n data-slot='list-container'\n data-test-id='list-container'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n\nexport function ListItemLeftSide ({ children, className, ...props }: ListItemLeftSideProps) {\n const baseClasses = [\n 'flex justify-center items-center',\n 'text-[var(--deframe-widget-color-text-primary)]',\n ].join(' ')\n\n return (\n <div\n data-slot='list-item-left-side'\n data-test-id='list-item-left-side'\n className={twMerge(baseClasses, className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport function ListItemContent ({ children, className, ...props }: ListItemContentProps) {\n const baseClasses = [\n 'flex-1 self-stretch inline-flex flex-col justify-center items-start overflow-hidden',\n 'text-[var(--deframe-widget-color-text-primary)]',\n ].join(' ')\n\n return (\n <div\n data-slot='list-item-content'\n data-test-id='list-item-content'\n className={twMerge(baseClasses, className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n\nexport function ListItemRightSide ({ children, className, ...props }: ListItemRightSideProps) {\n const baseClasses = [\n 'flex flex-col justify-start items-end',\n 'text-[var(--deframe-widget-color-text-primary)]',\n ].join(' ')\n\n return (\n <div\n data-slot='list-item-right-side'\n data-test-id='list-item-right-side'\n className={twMerge(baseClasses, className)}\n {...props}\n >\n {children}\n </div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport { type ReactNode } from 'react'\n\nexport interface WalletListContainerProps {\n /** Child components (typically WalletItem components) */\n children: ReactNode\n /** Additional CSS class names */\n className?: string\n}\n\n/**\n * WalletListContainer — vertical flex wrapper with consistent gap between wallet items.\n */\nexport default function WalletListContainer ({\n children,\n className,\n}: WalletListContainerProps) {\n return (\n <div\n data-slot='wallet-list-container'\n className={twMerge('w-full flex flex-col gap-[var(--deframe-widget-size-gap-sm)]', className)}\n >\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport type { WalletItemProps } from '../index'\n\n// ─── WalletItem ───────────────────────────────────────────────────────────────\n\n/**\n * WalletItem — individual tappable wallet row.\n * Rounded-square icon + wallet name + chevron, themed with Hash design tokens.\n */\nexport default function WalletItem ({\n id,\n name,\n icon,\n onClick,\n className,\n}: WalletItemProps) {\n return (\n <button\n key={id}\n data-slot='wallet-item'\n data-test-id='wallet-item'\n aria-label={`Connect ${name} wallet`}\n onClick={onClick}\n className={twMerge(\n 'w-full flex items-center gap-[var(--deframe-widget-size-gap-sm)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)] active:scale-[0.99]',\n 'transition-[background,border-color] duration-150',\n 'cursor-pointer outline-none text-left',\n 'font-[var(--deframe-widget-font-family)]',\n className\n )}\n >\n <div\n data-slot='wallet-item-icon'\n data-test-id='wallet-item-icon'\n className='shrink-0 w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] overflow-hidden flex items-center justify-center'\n >\n {typeof icon === 'string'\n ? (\n <img\n src={icon}\n alt={name}\n className='object-cover w-full h-full'\n />\n )\n : (\n icon\n )}\n </div>\n\n <div className='flex-1 text-[17px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] leading-[1.3] [font-family:inherit]'>\n {name}\n </div>\n\n <svg\n data-slot='wallet-item-chevron'\n data-test-id='wallet-item-chevron'\n fill='none'\n aria-hidden='true'\n className='flex-shrink-0 text-(--deframe-widget-color-text-secondary)'\n >\n <path\n d='M7.5 5L12.5 10L7.5 15'\n stroke='currentColor'\n strokeWidth='1.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </svg>\n </button>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport WalletListContainer from './WalletListContainer'\nimport WalletItem from './WalletItem'\n\nexport interface WalletOption {\n /** Unique identifier for the wallet */\n id: string\n /** Display name of the wallet */\n name: string\n /** Wallet icon — image URL or React node */\n icon: string | React.ReactNode\n /** Click handler for wallet selection */\n onClick?: () => void\n}\n\nexport interface ConnectWalletListProps {\n /** List of wallet options */\n wallets: WalletOption[]\n /** Optional title shown above the list */\n title?: string\n /** Optional subtitle shown below the title */\n subtitle?: string\n /** Additional CSS class names */\n className?: string\n}\n\n/**\n * ConnectWalletList — headless list of wallet options with optional title and subtitle.\n * No outer panel/card styling — embed inside your own container or use WalletConnectPanel.\n */\nexport default function ConnectWalletList ({\n wallets,\n title,\n subtitle,\n className,\n}: ConnectWalletListProps) {\n return (\n <div\n data-slot='connect-wallet-list'\n className={twMerge('w-full flex flex-col gap-[var(--deframe-widget-size-gap-md)]', className)}\n >\n {(title != null || subtitle != null) && (\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-xs)]'>\n {title != null && (\n <h2 className='text-[color:var(--deframe-widget-color-text-primary)] text-[20px] [font-weight:var(--deframe-widget-font-weight-bold)] leading-[1.25] font-[var(--deframe-widget-font-family)]'>\n {title}\n </h2>\n )}\n {subtitle != null && (\n <p className='text-[color:var(--deframe-widget-color-text-secondary)] text-[14px] leading-[1.5] font-[var(--deframe-widget-font-family)]'>\n {subtitle}\n </p>\n )}\n </div>\n )}\n <WalletListContainer>\n {wallets.map((wallet) => (\n <WalletItem\n key={wallet.id}\n id={wallet.id}\n name={wallet.name}\n icon={wallet.icon}\n onClick={() => wallet.onClick?.()}\n />\n ))}\n </WalletListContainer>\n </div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport WalletItem from './WalletItem'\nimport WalletListContainer from './WalletListContainer'\nimport type { WalletOption } from './WalletList'\n\nexport interface WalletConnectPanelProps {\n /** List of wallet options to display */\n wallets: WalletOption[]\n /** Panel title. Defaults to \"Conectar Carteira\" */\n title?: string\n /** Subtitle below the title. Defaults to the standard connect message */\n subtitle?: string\n /** When provided, a \"Sair\" button appears in the header and calls this on click */\n onClose?: () => void\n /** Additional CSS class names */\n className?: string\n}\n\n/**\n * WalletConnectPanel — \"Conectar Carteira\" macro compound component.\n *\n * Self-contained dark panel with:\n * - Title + optional \"Sair\" close button\n * - Muted subtitle\n * - Vertical list of tappable WalletItem cards\n *\n * Themed via Hash design tokens (CSS vars).\n */\nexport function WalletConnectPanel ({\n wallets,\n title,\n subtitle,\n onClose,\n className,\n}: WalletConnectPanelProps) {\n return (\n <div\n data-slot='wallet-connect-panel'\n data-test-id='wallet-connect-panel'\n className={twMerge(\n 'w-full flex flex-col gap-[var(--deframe-widget-size-gap-md)] px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'font-[var(--deframe-widget-font-family)]',\n className\n )}\n >\n {/* ── Header: title + optional Sair ── */}\n <div className='flex items-center justify-between gap-[var(--deframe-widget-size-gap-md)]'>\n <h2 className='text-[color:var(--deframe-widget-color-text-primary)] text-[20px] [font-weight:var(--deframe-widget-font-weight-bold)] leading-[1.25] [font-family:inherit]'>\n {title ?? 'Conectar Carteira'}\n </h2>\n {onClose != null && (\n <button\n type='button'\n data-slot='wallet-connect-close'\n data-test-id='wallet-connect-close'\n onClick={onClose}\n className={twMerge(\n 'text-[color:var(--deframe-widget-color-text-secondary)] text-[15px] [font-weight:var(--deframe-widget-font-weight-medium)] leading-none',\n 'hover:text-[color:var(--deframe-widget-color-text-primary)] transition-colors duration-150',\n 'cursor-pointer outline-none bg-transparent border-none px-[var(--deframe-widget-size-padding-x-none)] py-[var(--deframe-widget-size-padding-y-none)]',\n 'flex-shrink-0 [font-family:inherit]'\n )}\n >\n Sair\n </button>\n )}\n </div>\n\n {/* ── Subtitle ── */}\n <p className='text-[color:var(--deframe-widget-color-text-secondary)] text-[14px] leading-[1.5] [font-family:inherit] -mt-[var(--deframe-widget-size-gap-sm)]'>\n {subtitle ?? 'Escolha sua carteira preferida para conectar'}\n </p>\n\n {/* ── Wallet list ── */}\n <WalletListContainer>\n {wallets.map((wallet) => (\n <WalletItem\n key={wallet.id}\n id={wallet.id}\n name={wallet.name}\n icon={wallet.icon}\n onClick={() => wallet.onClick?.()}\n />\n ))}\n </WalletListContainer>\n </div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport { CurrencyProps, CurrencyType, FiatProps } from '.'\n\n// Currency configuration\nconst CURRENCY_CONFIG = {\n symbols: {\n USD: '$',\n BRL: 'R$',\n EUR: '€',\n BTC: '₿',\n ETH: 'Ξ',\n USDC: '$',\n USDT: '$',\n } as Record<CurrencyType, string>,\n labels: {\n USD: 'USD',\n BRL: 'BRL',\n EUR: 'EUR',\n BTC: 'BTC',\n ETH: 'ETH',\n USDC: 'USDC',\n USDT: 'USDT',\n } as Record<CurrencyType, string>,\n}\n\n// Style configuration\nconst STYLE_CONFIG = {\n alignment: {\n left: 'items-start',\n center: 'items-center',\n right: 'items-end',\n },\n size: {\n sm: {\n primary: '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)]',\n secondary: '[font-size:var(--deframe-widget-font-size-lg)] [line-height:var(--deframe-widget-font-leading-lg)]',\n gap: 'gap-[var(--deframe-widget-size-gap-xs)]'\n },\n md: {\n primary: '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)]',\n secondary: '[font-size:var(--deframe-widget-font-size-xl)] [line-height:var(--deframe-widget-font-leading-xl)]',\n gap: 'gap-[var(--deframe-widget-size-gap-xs)]'\n },\n lg: {\n primary: '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)]',\n secondary: '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)]',\n gap: 'gap-[var(--deframe-widget-size-gap-xs)]'\n },\n },\n}\n\n/** Flexible currency display component supporting fiat and crypto */\nexport default function Currency (props: CurrencyProps | FiatProps) {\n // Normalize props: convert FiatProps to CurrencyProps format\n const normalizedProps: Required<\n Omit<CurrencyProps, 'secondaryAmount' | 'secondaryCurrency'>\n > &\n Pick<CurrencyProps, 'secondaryAmount' | 'secondaryCurrency'> =\n 'usdValue' in props\n ? {\n amount: props.amount,\n currency: 'USD',\n secondaryAmount: props.usdValue,\n secondaryCurrency: undefined,\n align: props.align ?? 'right',\n size: props.size ?? 'lg',\n showSymbol: false,\n showLabel: false,\n className: props.className ?? '',\n }\n : {\n amount: props.amount,\n currency: props.currency ?? 'USD',\n secondaryAmount: props.secondaryAmount,\n secondaryCurrency: props.secondaryCurrency,\n align: props.align ?? 'right',\n size: props.size ?? 'lg',\n showSymbol: props.showSymbol ?? true,\n showLabel: props.showLabel ?? false,\n className: props.className ?? '',\n }\n\n const {\n amount,\n currency,\n secondaryAmount,\n secondaryCurrency,\n align,\n size,\n showSymbol,\n showLabel,\n className,\n } = normalizedProps\n\n // Format currency value\n const formatAmount = (\n value: string,\n curr: CurrencyType,\n displaySymbol: boolean\n ): string => {\n if (!displaySymbol && !showLabel) return value\n\n const symbol = displaySymbol ? CURRENCY_CONFIG.symbols[curr] : ''\n const label = showLabel ? ` ${CURRENCY_CONFIG.labels[curr]}` : ''\n\n // Crypto currencies: no space between symbol and value\n if (\n ['BTC', 'ETH'].includes(curr) &&\n !value.includes('.') &&\n !value.includes(',')\n ) {\n return `${symbol}${value}${label}`\n }\n\n return `${symbol} ${value}${label}`.trim()\n }\n\n return (\n <div\n className={twMerge(\n 'flex flex-col',\n STYLE_CONFIG.alignment[align],\n STYLE_CONFIG.size[size].gap,\n className\n )}\n >\n {/* Primary amount */}\n <div\n className={twMerge(\n '[font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary)] font-[var(--deframe-widget-font-family)]',\n STYLE_CONFIG.size[size].primary\n )}\n >\n {formatAmount(amount, currency, showSymbol)}\n </div>\n\n {/* Secondary amount (optional) */}\n {secondaryAmount && (\n <div\n className={twMerge(\n 'text-[color:var(--deframe-widget-color-text-secondary)] font-[var(--deframe-widget-font-family)]',\n STYLE_CONFIG.size[size].secondary\n )}\n >\n {secondaryCurrency\n ? formatAmount(secondaryAmount, secondaryCurrency, true)\n : secondaryAmount}\n </div>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport type { TextProps } from './index'\n\n/**\n * Base Text component used internally by other text variants.\n * Handles tag selection, base font, and class merging.\n */\nconst Text = React.forwardRef<HTMLElement, TextProps>(\n ({\n children,\n as: Component = 'p',\n disabled = false,\n className = '',\n ...props\n },\n ref\n ) => {\n const baseClasses = [\n '[font-family:var(--deframe-widget-font-family)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n ].join(' ')\n\n const stateClasses = {\n enabled: 'text-[color:var(--deframe-widget-color-text-primary)]',\n disabled: 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n } as const\n\n const textClasses = twMerge(\n baseClasses,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return React.createElement(\n Component,\n {\n ref,\n className: textClasses,\n 'aria-disabled': disabled || undefined,\n ...props,\n },\n children\n )\n }\n)\n\nText.displayName = 'Text'\nexport default Text\n","import * as React from 'react'\nimport Text from './Text'\nimport { TextAccentProps } from './index'\nimport { twMerge } from 'tailwind-merge'\n\nexport const TextAccent = React.forwardRef<HTMLElement, TextAccentProps>(\n ({\n as = 'span',\n variant = 'accent-medium',\n disabled = false,\n className = '',\n ...props\n },\n ref\n ) => {\n const accentVariants = {\n 'accent-large': [\n '[font-size:var(--deframe-widget-font-size-lg)]',\n '[line-height:var(--deframe-widget-font-leading-lg)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n ].join(' '),\n 'accent-medium': [\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n ].join(' '),\n 'accent-small': [\n '[font-size:var(--deframe-widget-font-size-sm)]',\n '[line-height:var(--deframe-widget-font-leading-sm)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n ].join(' '),\n } as const\n\n const stateClasses = {\n enabled: 'text-[color:var(--deframe-widget-color-text-primary)]',\n disabled: 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n } as const\n\n type AccentVariant = keyof typeof accentVariants\n const variantClass = accentVariants[variant as AccentVariant]\n const accentClasses = twMerge(\n variantClass,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <Text\n ref={ref}\n as={as}\n className={accentClasses}\n data-slot='text-accent'\n data-test-id='text-accent'\n aria-disabled={disabled || undefined}\n {...props}\n />\n )\n }\n)\n\nTextAccent.displayName = 'TextAccent'\nexport default TextAccent\n","import * as React from 'react'\nimport Text from './Text'\nimport { TextBodyProps } from './index'\nimport { twMerge } from 'tailwind-merge'\n\nexport const TextBody = React.forwardRef<HTMLElement, TextBodyProps>(\n ({\n as = 'p',\n variant = 'text-medium',\n disabled = false,\n className = '',\n ...props\n },\n ref\n ) => {\n const bodyVariants = {\n 'text-large': [\n '[font-size:var(--deframe-widget-font-size-lg)]',\n '[line-height:var(--deframe-widget-font-leading-lg)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n ].join(' '),\n 'text-medium': [\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n ].join(' '),\n 'text-small': [\n '[font-size:var(--deframe-widget-font-size-sm)]',\n '[line-height:var(--deframe-widget-font-leading-sm)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n ].join(' '),\n } as const\n\n const stateClasses = {\n enabled: 'text-[color:var(--deframe-widget-color-text-primary)]',\n disabled: 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n } as const\n\n type BodyVariant = keyof typeof bodyVariants\n const variantClass = bodyVariants[variant as BodyVariant]\n const bodyClasses = twMerge(\n variantClass,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <Text\n ref={ref}\n as={as}\n className={bodyClasses}\n data-slot='text-body'\n data-test-id='text-body'\n aria-disabled={disabled || undefined}\n {...props}\n />\n )\n }\n)\n\nTextBody.displayName = 'TextBody'\nexport default TextBody\n","import * as React from 'react'\nimport Text from './Text'\nimport { TextHeadingProps } from './index'\nimport { twMerge } from 'tailwind-merge'\n\nexport const TextHeading = React.forwardRef<HTMLElement, TextHeadingProps>(\n ({\n as,\n variant = 'h2',\n disabled = false,\n className = '',\n ...props\n }, ref) => {\n const headingVariants = {\n 'h-large': [\n '[font-size:var(--deframe-widget-font-size-xxl)]',\n '[line-height:var(--deframe-widget-font-leading-sm)]',\n '[font-weight:var(--deframe-widget-font-weight-extrabold)]',\n ].join(' '),\n h1: [\n '[font-size:var(--deframe-widget-font-size-xxl)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-extrabold)]',\n ].join(' '),\n h2: [\n '[font-size:var(--deframe-widget-font-size-xxl)]',\n '[line-height:var(--deframe-widget-font-leading-lg)]',\n '[font-weight:var(--deframe-widget-font-weight-extrabold)]',\n ].join(' '),\n h3: [\n '[font-size:var(--deframe-widget-font-size-xl)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n ].join(' '),\n h4: [\n '[font-size:var(--deframe-widget-font-size-xl)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n ].join(' '),\n h5: [\n '[font-size:var(--deframe-widget-font-size-lg)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n ].join(' '),\n } as const\n\n const stateClasses = {\n enabled: 'text-[color:var(--deframe-widget-color-text-primary)]',\n disabled: 'text-[color:var(--deframe-widget-color-text-primary-disabled)]',\n } as const\n\n type HeadingVariant = keyof typeof headingVariants\n const variantClass = headingVariants[variant as HeadingVariant]\n const headingClasses = twMerge(\n variantClass,\n stateClasses[disabled ? 'disabled' : 'enabled'],\n className\n )\n\n return (\n <Text\n ref={ref}\n as={(variant === 'h-large' ? 'h1' : variant) as keyof React.JSX.IntrinsicElements}\n className={headingClasses}\n data-slot='text-heading'\n data-test-id='text-heading'\n aria-disabled={disabled || undefined}\n {...props}\n />\n )\n }\n)\n\nTextHeading.displayName = 'TextHeading'\nexport default TextHeading\n","import TextHeading from './TextHeading'\nimport { TextHeadingProps } from './index'\n\n/**\n * Title component for headings and page titles\n * This is an alias for TextHeading with h1 variant as default\n */\nexport default function Title ({\n variant = 'h1',\n className = '',\n ...props\n}: TextHeadingProps) {\n return <TextHeading variant={variant} className={className} {...props} />\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { motion } from 'framer-motion'\n\n// ============================================================================\n// Context\n// ============================================================================\n\nexport type TabsVariant = 'primary' | 'secondary' | 'default' | 'light' | 'medium' | 'dark' | 'header'\n\ninterface TabsContextValue {\n value: string\n onValueChange: (value: string) => void\n variant: TabsVariant\n}\n\nconst TabsContext = React.createContext<TabsContextValue | undefined>(\n undefined\n)\n\nconst useTabs = () => {\n const ctx = React.useContext(TabsContext)\n if (!ctx) { throw new Error('Tabs compound components must be used within <Tabs />') }\n return ctx\n}\n\n// ============================================================================\n// Tabs (Main Component)\n// ============================================================================\n\nexport interface TabsProps extends React.HTMLAttributes<HTMLDivElement> {\n value?: string\n onValueChange?: (value: string) => void\n defaultValue?: string\n variant?: TabsVariant\n}\n\nexport const Tabs = React.forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n variant = 'secondary',\n className,\n children,\n ...props\n },\n ref\n ) => {\n const [internal, setInternal] = React.useState(defaultValue)\n const isControlled = controlledValue !== undefined\n const activeValue = isControlled ? controlledValue : internal\n\n const handleChange = (v: string) => {\n if (!isControlled) setInternal(v)\n onValueChange?.(v)\n }\n\n return (\n <TabsContext.Provider\n value={{\n value: activeValue,\n onValueChange: handleChange,\n variant,\n }}\n >\n <div ref={ref} className={twMerge('w-full', className)} {...props}>\n {children}\n </div>\n </TabsContext.Provider>\n )\n }\n)\nTabs.displayName = 'Tabs'\n\n// ============================================================================\n// TabsList\n// ============================================================================\n\nexport interface TabsListProps extends React.HTMLAttributes<HTMLDivElement> {}\n\nexport const TabsList = React.forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, children, ...props }, ref) => {\n const { variant } = useTabs()\n\n if (variant === 'header') {\n return (\n <div\n ref={ref}\n role='tablist'\n className={twMerge(\n 'relative w-full flex items-center justify-between',\n 'pt-[var(--deframe-widget-size-padding-y-sm)]',\n 'px-[var(--deframe-widget-size-padding-x-lg)]',\n 'bg-[var(--deframe-widget-color-bg-primary)]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n return (\n <div\n ref={ref}\n role='tablist'\n className={twMerge(\n 'relative w-full flex items-center bg-transparent border-b border-[color:var(--deframe-widget-color-border-secondary)]',\n variant === 'primary' ? 'h-[72px] gap-[var(--deframe-widget-size-gap-lg)]' : 'h-12',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nTabsList.displayName = 'TabsList'\n\n// ============================================================================\n// TabsTrigger\n// ============================================================================\n\nexport interface TabsTriggerProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n value: string\n icon?: React.ReactNode\n}\n\nexport const TabsTrigger = React.forwardRef<HTMLButtonElement, TabsTriggerProps>(\n (\n {\n value,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const { value: activeValue, onValueChange, variant } = useTabs()\n const isActive = activeValue === value\n\n return (\n <button\n ref={ref}\n role='tab'\n aria-selected={isActive}\n onClick={() => onValueChange(value)}\n className={twMerge(\n 'relative inline-flex flex-col items-center justify-center whitespace-nowrap font-[var(--deframe-widget-font-family)] transition-colors cursor-pointer disabled:pointer-events-none disabled:opacity-50 outline-none',\n variant === 'header'\n ? 'flex-1 [font-size:var(--deframe-widget-font-size-lg)] [font-weight:var(--deframe-widget-font-weight-semibold)] py-[var(--deframe-widget-size-padding-y-md)]'\n : variant === 'primary'\n ? 'h-[72px] [font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)] [font-weight:var(--deframe-widget-font-weight-medium)] px-[var(--deframe-widget-size-padding-x-none)] pb-[var(--deframe-widget-size-padding-y-sm)] pt-[var(--deframe-widget-size-padding-y-sm)] flex-none'\n : 'h-12 text-[12px] [font-weight:var(--deframe-widget-font-weight-semibold)] px-[var(--deframe-widget-size-padding-x-md)] flex-none',\n variant === 'header'\n ? (isActive ? 'text-[color:var(--deframe-widget-color-brand-primary)]' : 'text-[color:var(--deframe-widget-color-text-secondary)]')\n : (isActive ? 'text-[color:var(--deframe-widget-color-brand-primary)]' : 'text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-text-primary)]'),\n className\n )}\n {...props}\n >\n <span>{children}</span>\n {isActive && variant === 'header' && (\n <motion.span\n layoutId='header-tab-indicator'\n className='absolute bottom-0 left-1/2 -translate-x-1/2 w-14 h-[3px] rounded-t-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-brand-primary)]'\n transition={{ type: 'spring', bounce: 0.2, duration: 0.6 }}\n />\n )}\n {isActive && variant !== 'header' && (\n <motion.span\n layoutId='tab-indicator'\n className='absolute bottom-0 left-0 right-0 h-0.5 bg-[var(--deframe-widget-color-brand-primary)] z-10'\n transition={{ type: 'spring', bounce: 0.2, duration: 0.6 }}\n />\n )}\n </button>\n )\n }\n)\nTabsTrigger.displayName = 'TabsTrigger'\n\n// ============================================================================\n// TabsContent\n// ============================================================================\n\nexport interface TabsContentProps extends React.HTMLAttributes<HTMLDivElement> {\n value: string\n}\n\nexport const TabsContent = React.forwardRef<HTMLDivElement, TabsContentProps>(\n ({ value, className, children, ...props }, ref) => {\n const { value: activeValue, variant } = useTabs()\n if (activeValue !== value) return null\n\n return (\n <div\n ref={ref}\n role='tabpanel'\n className={twMerge(\n 'focus-visible:outline-none',\n variant === 'primary' || variant === 'header' ? 'mt-[var(--deframe-widget-size-gap-none)]' : 'mt-[var(--deframe-widget-size-gap-lg)]',\n className\n )}\n {...props}\n >\n {children}\n </div>\n )\n }\n)\nTabsContent.displayName = 'TabsContent'\n","import * as React from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface SelectProps {\n value: string\n onValueChange: (value: string) => void\n disabled?: boolean\n children: React.ReactNode\n className?: string\n}\n\nexport interface SelectTriggerProps {\n placeholder?: string\n className?: string\n children?: React.ReactNode\n // Internal props (passed by Select)\n _isOpen?: boolean\n _disabled?: boolean\n _onToggle?: () => void\n}\n\nexport interface SelectContentProps {\n className?: string\n children: React.ReactNode\n // Internal props (passed by Select)\n _isOpen?: boolean\n _value?: string\n _onSelect?: (value: string) => void\n _highlightedIndex?: number\n _setHighlightedIndex?: (index: number) => void\n}\n\nexport interface SelectItemProps {\n value: string\n disabled?: boolean\n className?: string\n children: React.ReactNode\n // Internal props (passed by SelectContent)\n _index?: number\n _isSelected?: boolean\n _isHighlighted?: boolean\n _onSelect?: (value: string) => void\n _onHighlight?: (index: number) => void\n}\n\n// ============================================================================\n// ChevronDownIcon\n// ============================================================================\n\nconst ChevronDownIcon: React.FC<{ className?: string }> = ({ className }) => (\n <svg\n className={className}\n viewBox='0 0 20 20'\n fill='currentColor'\n aria-hidden='true'\n >\n <path\n fillRule='evenodd'\n d='M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z'\n clipRule='evenodd'\n />\n </svg>\n)\n\n// ============================================================================\n// Select\n// ============================================================================\n\nexport const Select: React.FC<SelectProps> = ({\n value,\n onValueChange,\n disabled = false,\n children,\n className,\n}) => {\n const [isOpen, setIsOpen] = React.useState(false)\n const [highlightedIndex, setHighlightedIndex] = React.useState(-1)\n const containerRef = React.useRef<HTMLDivElement>(null)\n\n const handleToggle = React.useCallback(() => {\n if (!disabled) {\n setIsOpen((prev) => !prev)\n if (!isOpen) setHighlightedIndex(0)\n }\n }, [disabled, isOpen])\n\n const handleSelect = React.useCallback(\n (newValue: string) => {\n onValueChange(newValue)\n setIsOpen(false)\n setHighlightedIndex(-1)\n },\n [onValueChange]\n )\n\n // Handle click outside\n React.useEffect(() => {\n const handleClickOutside = (event: MouseEvent) => {\n if (\n containerRef.current &&\n !containerRef.current.contains(event.target as Node)\n ) {\n setIsOpen(false)\n setHighlightedIndex(-1)\n }\n }\n\n if (isOpen) {\n document.addEventListener('mousedown', handleClickOutside)\n return () => document.removeEventListener('mousedown', handleClickOutside)\n }\n }, [isOpen])\n\n // Handle escape key\n React.useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen) {\n setIsOpen(false)\n setHighlightedIndex(-1)\n }\n }\n\n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isOpen])\n\n // Clone children and inject internal props\n const enhancedChildren = React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return child\n\n if (child.type === SelectTrigger) {\n return React.cloneElement(child as React.ReactElement<SelectTriggerProps>, {\n _isOpen: isOpen,\n _disabled: disabled,\n _onToggle: handleToggle,\n })\n }\n\n if (child.type === SelectContent) {\n return React.cloneElement(child as React.ReactElement<SelectContentProps>, {\n _isOpen: isOpen,\n _value: value,\n _onSelect: handleSelect,\n _highlightedIndex: highlightedIndex,\n _setHighlightedIndex: setHighlightedIndex,\n })\n }\n\n return child\n })\n\n return (\n <div ref={containerRef} className={twMerge('relative', className)}>\n {enhancedChildren}\n </div>\n )\n}\n\nSelect.displayName = 'Select'\n\n// ============================================================================\n// SelectTrigger\n// ============================================================================\n\nexport const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n (\n {\n placeholder = 'Select...',\n className,\n children,\n _isOpen,\n _disabled,\n _onToggle,\n },\n ref\n ) => {\n const hasChildren = React.Children.count(children) > 0\n\n return (\n <button\n ref={ref}\n type='button'\n onClick={_onToggle}\n disabled={_disabled}\n aria-haspopup='listbox'\n aria-expanded={_isOpen}\n className={twMerge(\n 'w-full flex items-center justify-between gap-[var(--deframe-widget-size-gap-sm)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)].5',\n '[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-primary)] text-left',\n 'transition-colors cursor-pointer',\n 'hover:border-[color:var(--deframe-widget-color-border-primary)]',\n 'focus:outline-none focus:ring-2 focus:ring-[color:var(--deframe-widget-color-brand-primary)] focus:border-[color:var(--deframe-widget-color-brand-primary)]',\n _disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n >\n <span\n className={\n !hasChildren\n ? 'text-[color:var(--deframe-widget-color-text-tertiary)]'\n : undefined\n }\n >\n {hasChildren ? children : placeholder}\n </span>\n <ChevronDownIcon\n className={twMerge(\n 'w-4 h-4 text-[color:var(--deframe-widget-color-text-secondary)] transition-transform',\n _isOpen && 'rotate-180'\n )}\n />\n </button>\n )\n }\n)\n\nSelectTrigger.displayName = 'SelectTrigger'\n\n// ============================================================================\n// SelectContent\n// ============================================================================\n\nexport const SelectContent = React.forwardRef<HTMLUListElement, SelectContentProps>(\n (\n {\n className,\n children,\n _isOpen,\n _value,\n _onSelect,\n _highlightedIndex,\n _setHighlightedIndex,\n },\n ref\n ) => {\n const listRef = React.useRef<HTMLUListElement>(null)\n\n // Merge refs\n const mergedRef = React.useCallback(\n (node: HTMLUListElement | null) => {\n if (typeof ref === 'function') {\n ref(node)\n } else if (ref) {\n ref.current = node\n }\n ;(listRef as React.MutableRefObject<HTMLUListElement | null>).current = node\n },\n [ref]\n )\n\n // Scroll highlighted option into view\n React.useEffect(() => {\n if (_isOpen && _highlightedIndex !== undefined && _highlightedIndex >= 0 && listRef.current) {\n const highlightedElement = listRef.current.children[_highlightedIndex] as HTMLElement\n if (highlightedElement) {\n highlightedElement.scrollIntoView({ block: 'nearest' })\n }\n }\n }, [_isOpen, _highlightedIndex])\n\n // Clone children and inject internal props with index\n let itemIndex = 0\n const enhancedChildren = React.Children.map(children, (child) => {\n if (!React.isValidElement(child)) return child\n\n if (child.type === SelectItem) {\n const currentIndex = itemIndex++\n const itemProps = child.props as SelectItemProps\n return React.cloneElement(child as React.ReactElement<SelectItemProps>, {\n _index: currentIndex,\n _isSelected: _value === itemProps.value,\n _isHighlighted: _highlightedIndex === currentIndex,\n _onSelect,\n _onHighlight: _setHighlightedIndex,\n })\n }\n\n return child\n })\n\n const contentVariants = {\n hidden: { opacity: 0, y: -8 },\n visible: {\n opacity: 1,\n y: 0,\n transition: { type: 'spring' as const, damping: 25, stiffness: 400 },\n },\n exit: { opacity: 0, y: -8, transition: { duration: 0.1 } },\n }\n\n return (\n <AnimatePresence mode='wait'>\n {_isOpen && (\n <motion.ul\n ref={mergedRef}\n role='listbox'\n variants={contentVariants}\n initial='hidden'\n animate='visible'\n exit='exit'\n className={twMerge(\n 'absolute z-50 w-full mt-[var(--deframe-widget-size-gap-xs)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)] border border-[color:var(--deframe-widget-color-border-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] shadow-[0_20px_50px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_28%,transparent)]',\n 'max-h-60 overflow-auto',\n 'py-[var(--deframe-widget-size-padding-y-xs)]',\n className\n )}\n >\n {enhancedChildren}\n </motion.ul>\n )}\n </AnimatePresence>\n )\n }\n)\n\nSelectContent.displayName = 'SelectContent'\n\n// ============================================================================\n// SelectItem\n// ============================================================================\n\nexport const SelectItem = React.forwardRef<HTMLLIElement, SelectItemProps>(\n (\n {\n value,\n disabled = false,\n className,\n children,\n _index,\n _isSelected,\n _isHighlighted,\n _onSelect,\n _onHighlight,\n },\n ref\n ) => {\n const handleClick = () => {\n if (!disabled && _onSelect) {\n _onSelect(value)\n }\n }\n\n const handleMouseEnter = () => {\n if (!disabled && _onHighlight && _index !== undefined) {\n _onHighlight(_index)\n }\n }\n\n return (\n <li\n ref={ref}\n role='option'\n aria-selected={_isSelected}\n aria-disabled={disabled}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n className={twMerge(\n 'px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] [font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] cursor-pointer transition-colors',\n 'text-[color:var(--deframe-widget-color-text-primary)]',\n _isSelected && 'text-[color:var(--deframe-widget-color-brand-primary)]',\n _isHighlighted && 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n >\n {children}\n </li>\n )\n }\n)\n\nSelectItem.displayName = 'SelectItem'\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface SkeletonProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Width of the skeleton block (px, %, rem, etc.) */\n width?: string | number;\n /** Height of the skeleton block (px, %, rem, etc.) */\n height?: string | number;\n /** Shape of the skeleton */\n variant?: 'rect' | 'circle' | 'text';\n /** Enables shimmer animation */\n shimmer?: boolean;\n /** Custom background color (Tailwind classes) */\n colorClass?: string;\n}\n\nexport const Skeleton: React.FC<SkeletonProps> = ({\n width = '100%',\n height = '1rem',\n variant = 'text',\n shimmer = true,\n className,\n style,\n ...props\n}) => {\n const defaultGradient =\n 'linear-gradient(25deg, var(--deframe-widget-color-bg-tertiary) 0%, var(--deframe-widget-color-bg-tertiary) 60%, var(--deframe-widget-color-bg-secondary) 100%)'\n\n return (\n <div\n className={twMerge(\n 'relative overflow-hidden animate-fade-in',\n variant === 'circle' ? 'rounded-[var(--deframe-widget-size-radius-full)]' : 'rounded-[var(--deframe-widget-size-radius-xs)]',\n className\n )}\n style={{\n width: typeof width === 'number' ? `${width}px` : width,\n height: typeof height === 'number' ? `${height}px` : height,\n background: defaultGradient,\n ...style,\n }}\n {...props}\n >\n {shimmer && (\n <div className='absolute inset-0 animate-shimmer bg-gradient-to-r from-transparent via-[color-mix(in srgb, var(--deframe-widget-color-bg-tertiary) 92%, transparent)] to-transparent' />\n )}\n </div>\n )\n}\n\nSkeleton.displayName = 'Skeleton'\n","import { twMerge } from 'tailwind-merge'\nimport type { ComponentProps } from 'react'\nimport { TextHeading, TextBody } from '../texts'\n\nexport function BannerNotificationIcon ({ className, ...props }: ComponentProps<'div'>) {\n const baseClasses = [\n 'flex items-center justify-center',\n 'flex-shrink-0',\n '[font-size:var(--deframe-widget-font-size-xxl)]',\n ].join(' ')\n\n return (\n <div\n data-slot='banner-notification-icon'\n data-test-id='banner-notification-icon'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n\nexport function BannerNotificationContent ({ className, ...props }: ComponentProps<'div'>) {\n const baseClasses = 'flex-1 min-w-0 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)]'\n\n return (\n <div\n data-slot='banner-notification-content'\n data-test-id='banner-notification-content'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n\nexport function BannerNotificationTitle ({ className, ...props }: ComponentProps<'p'>) {\n return (\n <TextHeading\n variant='h4'\n as='p'\n data-slot='banner-notification-title'\n data-test-id='banner-notification-title'\n className={twMerge('[margin-bottom:var(--deframe-widget-size-gap-xs)] text-inherit', className)}\n {...props}\n />\n )\n}\n\nexport function BannerNotificationMessage ({ className, ...props }: ComponentProps<'p'>) {\n return (\n <TextBody\n variant='text-medium'\n data-slot='banner-notification-message'\n data-test-id='banner-notification-message'\n className={twMerge('text-inherit', className)}\n {...props}\n />\n )\n}\n\nexport function BannerNotificationClose ({ className, ...props }: ComponentProps<'button'>) {\n const baseClasses = [\n 'flex-shrink-0',\n 'self-start',\n '[font-size:var(--deframe-widget-font-size-xl)]',\n 'transition-opacity hover:opacity-70 cursor-pointer',\n ].join(' ')\n\n return (\n <button\n data-slot='banner-notification-close'\n data-test-id='banner-notification-close'\n aria-label='Close notification'\n className={twMerge(baseClasses, className)}\n {...props}\n />\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport {\n MdInfoOutline,\n MdWarningAmber,\n MdErrorOutline,\n MdCheckCircleOutline,\n MdClose,\n} from 'react-icons/md'\nimport {\n BannerNotificationIcon,\n BannerNotificationContent,\n BannerNotificationTitle,\n BannerNotificationMessage,\n BannerNotificationClose,\n} from './BannerNotificationCompound'\n\nexport interface BannerNotificationProps\n extends React.HTMLAttributes<HTMLDivElement> {\n /** Type of notification - inline (default) or toast */\n type?: 'inline' | 'toast'\n /** Variant type that determines colors and icon */\n variant?: 'info' | 'warning' | 'error' | 'success'\n /** The title of the banner */\n title?: string\n /** The message to display in the banner */\n message: string\n /** Position for toast notifications */\n position?:\n | 'top-right'\n | 'top-left'\n | 'top-center'\n | 'bottom-right'\n | 'bottom-left'\n | 'bottom-center'\n /** Auto hide duration in milliseconds (default: 5000, set to 0 to disable) */\n autoHideDuration?: number\n /** Control visibility for toast notifications */\n show?: boolean\n /** Callback when notification is closed */\n onClose?: () => void\n /** Whether to show the icon (default: true) */\n showIcon?: boolean\n /** Custom icon to display */\n icon?: React.ReactNode\n}\n\nexport const BannerNotification: React.FC<BannerNotificationProps> = ({\n type = 'inline',\n variant = 'info',\n title,\n message,\n position = 'top-right',\n autoHideDuration = 5000,\n show = true,\n onClose,\n showIcon = true,\n icon,\n className,\n ...props\n}: BannerNotificationProps) => {\n const [isVisible, setIsVisible] = React.useState(show)\n const [isExiting, setIsExiting] = React.useState(false)\n const timerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const variantInlineClasses = {\n info: 'bg-[var(--deframe-widget-color-state-info)]/20 border-[var(--deframe-widget-color-state-info)]',\n warning: 'bg-[var(--deframe-widget-color-state-warning)]/20 border-[var(--deframe-widget-color-state-warning)]',\n error: 'bg-[var(--deframe-widget-color-state-error)]/20 border-[var(--deframe-widget-color-state-error)]',\n success: 'bg-[var(--deframe-widget-color-state-success)]/20 border-[var(--deframe-widget-color-state-success)]',\n } as const\n\n const variantToastClasses = {\n info: 'bg-[var(--deframe-widget-color-state-info)] border-[var(--deframe-widget-color-state-info)]',\n warning: 'bg-[var(--deframe-widget-color-state-warning)] border-[var(--deframe-widget-color-state-warning)]',\n error: 'bg-[var(--deframe-widget-color-state-error)] border-[var(--deframe-widget-color-state-error)]',\n success: 'bg-[var(--deframe-widget-color-state-success)] border-[var(--deframe-widget-color-state-success)]',\n } as const\n\n const variantTextClasses = {\n info: 'text-[var(--deframe-widget-color-state-info)]',\n warning: 'text-[var(--deframe-widget-color-state-warning)]',\n error: 'text-[var(--deframe-widget-color-state-error)]',\n success: 'text-[var(--deframe-widget-color-state-success)]',\n } as const\n\n const variantIcons = {\n info: MdInfoOutline,\n warning: MdWarningAmber,\n error: MdErrorOutline,\n success: MdCheckCircleOutline,\n } as const\n\n const positionClasses = {\n 'top-right': 'top-4 right-4',\n 'top-left': 'top-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n } as const\n\n const handleClose = () => {\n setIsExiting(true)\n setTimeout(() => {\n setIsVisible(false)\n if (timerRef.current) {\n clearTimeout(timerRef.current)\n timerRef.current = null\n }\n onClose?.()\n }, 300)\n }\n\n React.useEffect(() => {\n if (!show) {\n handleClose()\n return\n }\n setIsVisible(true)\n setIsExiting(false)\n }, [show])\n\n React.useEffect(() => {\n if (type === 'toast' && show && autoHideDuration > 0 && !isExiting) {\n timerRef.current = setTimeout(handleClose, autoHideDuration)\n }\n return () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current)\n timerRef.current = null\n }\n }\n }, [type, show, autoHideDuration, isExiting])\n\n if (!isVisible) return null\n\n type Variant = 'info' | 'warning' | 'error' | 'success'\n type BannerType = 'inline' | 'toast'\n type Position = keyof typeof positionClasses\n\n const v = variant as Variant\n const t = type as BannerType\n const p = position as Position\n\n const baseClasses = [\n 'flex items-center',\n '[gap:var(--deframe-widget-size-gap-md)]',\n 'px-[var(--deframe-widget-size-padding-x-md)]',\n 'py-[var(--deframe-widget-size-padding-y-sm)]',\n 'rounded-[var(--deframe-widget-size-radius-xs)]',\n 'border',\n 'transition-all duration-300',\n ].join(' ')\n\n const typeClasses = {\n inline: variantInlineClasses[v],\n toast: [\n variantToastClasses[v],\n 'fixed z-50 w-[clamp(18rem,40vw,30rem)] shadow-[0_20px_50px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_28%,transparent)]',\n positionClasses[p],\n ].join(' '),\n } as const\n\n const bannerClasses = twMerge(\n baseClasses,\n typeClasses[t],\n variantTextClasses[v],\n isExiting && 'opacity-0 -translate-y-2',\n className\n )\n\n const IconComponent = variantIcons[v]\n const resolvedIcon = icon ?? <IconComponent />\n\n return (\n <div\n data-slot='banner-notification'\n data-test-id='banner-notification'\n role='alert'\n className={bannerClasses}\n {...props}\n >\n {\n showIcon && (\n <BannerNotificationIcon>{resolvedIcon}</BannerNotificationIcon>\n )\n }\n\n <BannerNotificationContent>\n {title && <BannerNotificationTitle>{title}</BannerNotificationTitle>}\n <BannerNotificationMessage>{message}</BannerNotificationMessage>\n </BannerNotificationContent>\n\n <BannerNotificationClose onClick={handleClose}>\n <MdClose />\n </BannerNotificationClose>\n </div>\n )\n}\n\nBannerNotification.displayName = 'BannerNotification'\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\n\nexport interface AddressDisplayProps {\n /** The full address to display */\n address: string;\n /** Optional truncated display text shown instead of the full address */\n displayText?: string;\n /** Callback when copy button is clicked */\n onCopy?: (address: string) => void;\n /** Custom className for the container */\n className?: string;\n /** Custom className for the text */\n textClassName?: string;\n /** Show copy button */\n showCopyButton?: boolean;\n}\n\nexport const AddressDisplay: React.FC<AddressDisplayProps> = ({\n address,\n onCopy,\n className = '',\n textClassName = '',\n showCopyButton = true,\n}) => {\n const [copied, setCopied] = React.useState(false)\n\n const handleCopy = async () => {\n try {\n await navigator.clipboard.writeText(address)\n setCopied(true)\n onCopy?.(address)\n\n // Reset copied state after 2 seconds\n setTimeout(() => setCopied(false), 2000)\n } catch (err) {\n console.error('Failed to copy address:', err)\n }\n }\n\n return (\n <div\n className={twMerge(\n 'bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-sm)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n 'flex items-center justify-between gap-[var(--deframe-widget-size-gap-sm)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n className\n )}\n >\n <TextBody\n className={twMerge(\n 'block w-full whitespace-nowrap overflow-hidden',\n textClassName\n )}\n >\n {address}\n </TextBody>\n {showCopyButton && (\n <button\n onClick={handleCopy}\n className='text-[color:var(--deframe-widget-color-text-tertiary)] hover:text-[color:var(--deframe-widget-color-text-primary)] transition-colors flex-shrink-0 cursor-pointer'\n aria-label='Copy address'\n >\n {copied\n ? (\n <svg\n className='w-5 h-5 text-[color:var(--deframe-widget-color-state-success)]'\n fill='none'\n stroke='currentColor'\n viewBox='0 0 24 24'\n >\n <path\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth={2}\n d='M5 13l4 4L19 7'\n />\n </svg>\n )\n : (\n <svg\n className='w-5 h-5'\n fill='none'\n stroke='currentColor'\n viewBox='0 0 24 24'\n >\n <path\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth={2}\n d='M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z'\n />\n </svg>\n )}\n </button>\n )}\n </div>\n )\n}\n\nAddressDisplay.displayName = 'AddressDisplay'\n","import * as React from 'react'\nimport { TextBody } from '@/stories/texts'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface DetailItem {\n /** Label for the detail row */\n label: string;\n /** Value to display */\n value: string | React.ReactNode;\n /** Optional custom className for the value */\n valueClassName?: string;\n /** Optional custom className for the label */\n labelClassName?: string;\n}\n\nexport interface SummaryDetailsProps {\n /** Title displayed in the summary header */\n title: string;\n /** Array of detail items to render */\n items: DetailItem[];\n /** Whether the details are open by default */\n defaultOpen?: boolean;\n /** Custom className for the details container */\n className?: string;\n /** Custom className for the summary header */\n summaryClassName?: string;\n /** Custom className for the content area */\n contentClassName?: string;\n /** Show dividers between items */\n showDividers?: boolean;\n}\n\nexport const SummaryDetails: React.FC<SummaryDetailsProps> = ({\n title,\n items,\n defaultOpen = false,\n className = '',\n summaryClassName = '',\n contentClassName = '',\n showDividers = true,\n}) => {\n return (\n <details\n className={twMerge(\n 'bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-sm)]',\n 'p-[var(--deframe-widget-size-gap-lg)] group',\n className\n )}\n open={defaultOpen}\n >\n {/* Summary Header */}\n <summary className={twMerge('cursor-pointer block ', summaryClassName)}>\n <div className='flex items-center justify-between'>\n <TextBody className='text-[color:var(--deframe-widget-color-text-primary)] [font-weight:var(--deframe-widget-font-weight-medium)]'>{title}</TextBody>\n <svg\n className='w-5 h-5 text-[color:var(--deframe-widget-color-text-tertiary)] transition-transform duration-300 group-open:rotate-180'\n fill='none'\n stroke='currentColor'\n viewBox='0 0 24 24'\n aria-hidden='true'\n >\n <path\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth={2}\n d='M5 9l7 7 7-7'\n />\n </svg>\n </div>\n </summary>\n\n {/* Details Content */}\n <div\n className={twMerge(\n 'mt-[var(--deframe-widget-size-gap-lg)]',\n showDividers && 'divide-y divide-[color:var(--deframe-widget-color-border-tertiary)]',\n contentClassName\n )}\n >\n {items.map((item, index) => (\n <div key={index} className='flex justify-between py-[var(--deframe-widget-size-padding-y-sm)]'>\n <TextBody\n variant='text-small'\n className={twMerge('text-[color:var(--deframe-widget-color-text-tertiary)]', item.labelClassName)}\n >\n {item.label}\n </TextBody>\n {typeof item.value === 'string'\n ? (\n <TextBody\n variant='text-small'\n className={twMerge('text-[color:var(--deframe-widget-color-text-primary)] [font-weight:var(--deframe-widget-font-weight-medium)]', item.valueClassName)}\n >\n {item.value}\n </TextBody>\n )\n : (\n <div className={item.valueClassName}>{item.value}</div>\n )}\n </div>\n ))}\n </div>\n </details>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { type SummaryDetailsProps } from './SummaryDetails'\n\nexport const SummaryDetailsCryptoControlV2: React.FC<SummaryDetailsProps> = ({\n title,\n items,\n defaultOpen = false,\n className = '',\n summaryClassName = '',\n contentClassName = '',\n showDividers = true,\n}) => {\n return (\n <details\n data-test-id='summary-details-v2'\n data-slot='summary-details-v2'\n className={twMerge(\n 'bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-md)] border border-[color:var(--deframe-widget-color-border-secondary)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] w-full max-w-[320px] group',\n className\n )}\n open={defaultOpen}\n >\n {/* Header */}\n <summary\n data-test-id='summary-details-v2-summary'\n data-slot='summary-details-v2-summary'\n className={twMerge('cursor-pointer list-none', summaryClassName)}\n >\n <div className='flex items-center justify-between'>\n <span\n data-test-id='summary-details-v2-title'\n data-slot='summary-details-v2-title'\n className='text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)]'\n >\n {title}\n </span>\n <svg\n data-test-id='summary-details-v2-chevron'\n data-slot='summary-details-v2-chevron'\n className='w-4 h-4 text-[color:var(--deframe-widget-color-text-secondary)] transition-transform duration-300 group-open:rotate-180 flex-shrink-0'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n aria-hidden='true'\n >\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M5 9l7 7 7-7' />\n </svg>\n </div>\n </summary>\n\n {/* Top divider */}\n <div\n data-test-id='summary-details-v2-top-divider'\n data-slot='summary-details-v2-top-divider'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)] mt-[var(--deframe-widget-size-gap-sm)]'\n />\n\n {/* Rows */}\n <div\n data-test-id='summary-details-v2-content'\n data-slot='summary-details-v2-content'\n className={twMerge('mt-[var(--deframe-widget-size-gap-none)]', contentClassName)}\n >\n {items.map((item, i) => (\n <React.Fragment key={i}>\n <div\n data-test-id='summary-details-v2-row'\n data-slot='summary-details-v2-row'\n className='flex justify-between items-center py-[10px] gap-[var(--deframe-widget-size-gap-sm)]'\n >\n <span\n data-test-id='summary-details-v2-row-label'\n data-slot='summary-details-v2-row-label'\n className={twMerge(\n 'text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.07em] text-[color:var(--deframe-widget-color-text-tertiary)] flex-shrink-0',\n item.labelClassName\n )}\n >\n {item.label}\n </span>\n\n {typeof item.value === 'string'\n ? (\n <span\n data-test-id='summary-details-v2-row-value'\n data-slot='summary-details-v2-row-value'\n className={twMerge(\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] text-right',\n item.valueClassName\n )}\n >\n {item.value}\n </span>\n )\n : (\n <div\n data-test-id='summary-details-v2-row-value'\n data-slot='summary-details-v2-row-value'\n className={twMerge('text-right', item.valueClassName)}\n >\n {item.value}\n </div>\n )}\n </div>\n\n {showDividers && i < items.length - 1 && (\n <div\n data-test-id='summary-details-v2-row-divider'\n data-slot='summary-details-v2-row-divider'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)]'\n />\n )}\n </React.Fragment>\n ))}\n </div>\n </details>\n )\n}\n","import * as React from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface ActionSheetItem {\n id: string\n label: string\n icon?: React.ReactNode\n variant?: 'default' | 'destructive' | 'success'\n disabled?: boolean\n onClick?: () => void\n}\n\nexport interface ActionSheetProps {\n /** Unique identifier for this action sheet */\n id: string\n /** Current action sheet ID from state */\n currentActionSheetId?: string | null\n /** Whether the action sheet is open */\n isOpen?: boolean\n /** Function to close the action sheet */\n onClose?: () => void\n /** Custom content to render */\n children?: React.ReactNode\n /** Custom className for the container */\n className?: string\n /** Custom className for the content area */\n contentClassName?: string\n /** Position of the action sheet */\n position?: 'bottom' | 'center'\n /** Height of the sheet */\n height?: 'auto' | 'full' | 'half'\n /** Whether clicking the backdrop should close the sheet (default: true) */\n closeOnBackdropClick?: boolean\n /** Title displayed in the header */\n title?: string\n /** Description displayed below the title */\n description?: string\n /** List of action items to render */\n items?: ActionSheetItem[]\n /** Whether to show a cancel button (default: true) */\n showCancel?: boolean\n}\n\n/**\n * ActionSheet - A flexible bottom sheet / modal component\n *\n * Pure custom content mode for maximum flexibility.\n * Compose your content using existing library components.\n *\n * Features:\n * - Smooth framer-motion animations with spring physics\n * - Multiple height options (auto, full, half)\n * - Position options (bottom, center)\n * - Dark mode support via CSS custom properties\n * - Keyboard navigation (ESC to close)\n * - Backdrop click to dismiss\n * - ARIA labels for accessibility\n *\n * @example\n * <ActionSheet\n * id=\"token-selector\"\n * currentActionSheetId={currentId}\n * isOpen={isOpen}\n * height=\"full\"\n * onClose={handleClose}\n * >\n * <div className=\"flex flex-col h-full bg-[var(--deframe-widget-color-bg-primary)] px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)]\">\n * <h2>Select Token</h2>\n * <Input placeholder=\"Search here...\" />\n * <ListItem>...</ListItem>\n * </div>\n * </ActionSheet>\n */\nexport const ActionSheet: React.FC<ActionSheetProps> = ({\n id,\n currentActionSheetId,\n isOpen,\n onClose,\n children,\n className = '',\n contentClassName = '',\n position = 'bottom',\n height = 'auto',\n closeOnBackdropClick = true,\n title,\n description,\n items,\n showCancel = true,\n}) => {\n const isThisSheetActive = isOpen && currentActionSheetId === id\n\n React.useEffect(() => {\n if (isThisSheetActive) {\n // Prevent body scroll when action sheet is open\n document.body.style.overflow = 'hidden'\n } else {\n document.body.style.overflow = ''\n }\n\n return () => {\n document.body.style.overflow = ''\n }\n }, [isThisSheetActive])\n\n // Handle escape key\n React.useEffect(() => {\n if (!isThisSheetActive) return\n\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n onClose?.()\n }\n }\n\n document.addEventListener('keydown', handleEscape)\n return () => document.removeEventListener('keydown', handleEscape)\n }, [isThisSheetActive, onClose])\n\n // Handle backdrop click\n const handleBackdropClick = (e: React.MouseEvent) => {\n if (closeOnBackdropClick && e.target === e.currentTarget) {\n onClose?.()\n }\n }\n\n // Animation variants\n const backdropVariants = {\n hidden: { opacity: 0 },\n visible: { opacity: 1 },\n exit: { opacity: 0 },\n }\n\n const sheetVariants = {\n hidden: position === 'bottom' ? { y: '100%' } : { opacity: 0, scale: 0.95 },\n visible:\n position === 'bottom'\n ? {\n y: '0%',\n transition: {\n type: 'spring' as const,\n damping: 25,\n stiffness: 300,\n },\n }\n : {\n opacity: 1,\n scale: 1,\n transition: {\n type: 'spring' as const,\n damping: 25,\n stiffness: 300,\n },\n },\n exit:\n position === 'bottom'\n ? {\n y: '100%',\n transition: {\n type: 'spring' as const,\n damping: 25,\n stiffness: 300,\n },\n }\n : {\n opacity: 0,\n scale: 0.95,\n transition: {\n type: 'spring' as const,\n damping: 25,\n stiffness: 300,\n },\n },\n }\n\n // Height classes\n const getHeightClass = () => {\n switch (height) {\n case 'full':\n return 'h-full'\n case 'half':\n return 'h-[50vh]'\n case 'auto':\n default:\n return 'h-auto'\n }\n }\n\n return (\n <AnimatePresence mode='wait'>\n {isThisSheetActive && (\n <motion.div\n className={twMerge(\n 'fixed inset-0 z-50 flex justify-center',\n position === 'bottom' ? 'items-end' : 'items-center',\n className\n )}\n role='dialog'\n aria-modal='true'\n onClick={handleBackdropClick}\n variants={backdropVariants}\n initial='hidden'\n animate='visible'\n exit='exit'\n transition={{ duration: 0.2 }}\n >\n {/* Backdrop */}\n <div\n className='absolute inset-0 bg-[var(--deframe-widget-color-bg-primary)]/50 backdrop-blur-sm'\n aria-hidden='true'\n />\n\n {/* Action Sheet Content */}\n <motion.div\n className={twMerge(\n 'relative w-full bg-[var(--deframe-widget-color-bg-secondary)] shadow-[0_20px_50px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_28%,transparent)] overflow-hidden',\n position === 'bottom'\n ? 'max-w-full rounded-t-[var(--deframe-widget-size-radius-xl)]'\n : 'max-w-lg rounded-[var(--deframe-widget-size-radius-xl)] mx-[var(--deframe-widget-size-gap-md)]',\n getHeightClass(),\n contentClassName\n )}\n variants={sheetVariants}\n initial='hidden'\n animate='visible'\n exit='exit'\n >\n {children}\n </motion.div>\n </motion.div>\n )}\n </AnimatePresence>\n )\n}\n\nexport default ActionSheet\n","import { twMerge } from 'tailwind-merge'\n\nexport interface DeframeComponentsProviderProps {\n /** Optional extra className applied to the `.deframe-widget` root */\n className?: string\n /** Child components */\n children: React.ReactNode\n}\n\nexport default function DeframeComponentsProvider ({\n className,\n children\n}: DeframeComponentsProviderProps) {\n return (\n <div\n className={twMerge('deframe-widget', className)}\n >\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoRowProps {\n children: React.ReactNode;\n borderBottom?: boolean;\n className?: string;\n}\n\nexport const InfoRow: React.FC<InfoRowProps> = ({ children, borderBottom, className }) => {\n const baseClasses = 'self-stretch inline-flex justify-between items-start'\n const borderClasses = borderBottom ? 'border-b border-[color:var(--deframe-widget-color-border-secondary)] pb-[var(--deframe-widget-size-padding-y-sm)]' : ''\n\n return (\n <div data-test-id='info-row' className={twMerge(baseClasses, borderClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoLabelProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const InfoLabel: React.FC<InfoLabelProps> = ({ children, className }) => {\n const baseClasses = '[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'\n\n return (\n <div data-test-id='info-label' className={twMerge(baseClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoValueProps {\n children: React.ReactNode;\n variant?: 'default' | 'success' | 'warning' | 'error';\n className?: string;\n}\n\nconst variantClasses = {\n default: 'text-[color:var(--deframe-widget-color-text-primary)]',\n success: 'text-[color:var(--deframe-widget-color-state-success)]',\n warning: 'text-[color:var(--deframe-widget-color-state-warning)]',\n error: 'text-[color:var(--deframe-widget-color-state-error)]',\n} as const\n\nexport const InfoValue: React.FC<InfoValueProps> = ({ children, variant = 'default', className }) => {\n const baseClasses = '[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)]'\n\n return (\n <div data-test-id='info-value' className={twMerge(baseClasses, variantClasses[variant], className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoRowWithIconProps {\n children: React.ReactNode;\n borderBottom?: boolean;\n className?: string;\n}\n\nexport const InfoRowWithIcon: React.FC<InfoRowWithIconProps> = ({ children, borderBottom, className }) => {\n const baseClasses = 'flex items-start justify-between h-[17px]'\n const borderClasses = borderBottom ? 'border-b border-[color:var(--deframe-widget-color-border-secondary)] pb-[var(--deframe-widget-size-padding-y-sm)]' : ''\n\n return (\n <div data-test-id='info-row-with-icon' className={twMerge(baseClasses, borderClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoRowIconLabelProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const InfoRowIconLabel: React.FC<InfoRowIconLabelProps> = ({ children, className }) => {\n const baseClasses = '[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'\n\n return (\n <div data-test-id='info-row-icon-label' className={twMerge(baseClasses, className)}>\n • {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InfoRowIconValueProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const InfoRowIconValue: React.FC<InfoRowIconValueProps> = ({ children, className }) => {\n const baseClasses = '[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)]'\n\n return (\n <div data-test-id='info-row-icon-value' className={twMerge(baseClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { HiChevronDown, HiChevronUp } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface CollapsibleInfoRowProps {\n label: string;\n value: string;\n children?: React.ReactNode;\n defaultOpen?: boolean;\n className?: string;\n collapseLabel: string;\n expandLabel: string;\n}\n\nexport const CollapsibleInfoRow: React.FC<CollapsibleInfoRowProps> = ({\n label,\n value,\n children,\n defaultOpen = false,\n className,\n collapseLabel,\n expandLabel,\n}) => {\n const [isOpen, setIsOpen] = React.useState(defaultOpen)\n\n const baseClasses = 'flex flex-col gap-[var(--deframe-widget-size-gap-sm)] w-full'\n\n return (\n <div data-test-id='collapsible-info-row' className={twMerge(baseClasses, className)}>\n <button\n type='button'\n onClick={() => setIsOpen(!isOpen)}\n className='flex items-start justify-between w-full text-left h-[18px] cursor-pointer'\n aria-expanded={isOpen}\n aria-label={`${isOpen ? collapseLabel : expandLabel} ${label}`}\n >\n <div className='flex items-start gap-[2px]'>\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {label}\n </span>\n <div className='flex items-center justify-center w-[18px] h-[18px]'>\n {isOpen\n ? (\n <HiChevronUp className='w-3 h-3 text-[color:var(--deframe-widget-color-text-secondary)]' />\n )\n : (\n <HiChevronDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-secondary)]' />\n )}\n </div>\n </div>\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {value}\n </span>\n </button>\n {isOpen && children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface BackgroundContainerProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const BackgroundContainer: React.FC<BackgroundContainerProps> = ({ children, className }) => {\n const baseClasses = 'w-full flex-1 min-h-0 px-[var(--deframe-widget-size-padding-x-md)] bg-[var(--deframe-widget-color-bg-primary)] lg:bg-[var(--deframe-widget-color-bg-secondary)] text-[color:var(--deframe-widget-color-text-primary)] flex flex-col relative overflow-y-auto'\n\n return (\n <div data-test-id='background-container' className={twMerge(baseClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface SectionCardProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const SectionCard: React.FC<SectionCardProps> = ({ children, className }) => {\n const baseClasses = 'bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] shadow-[0_2px_8px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_18%,transparent)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col gap-[var(--deframe-widget-size-gap-sm)]'\n\n return (\n <div data-test-id='section-card' className={twMerge(baseClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface NavbarProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const Navbar: React.FC<NavbarProps> = ({ children, className }) => {\n const baseClasses = 'w-full px-[var(--deframe-widget-size-padding-x-sm)] pr-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-md)] border-b items-center border-[color:var(--deframe-widget-color-border-tertiary)] flex'\n\n return (\n <nav data-test-id='navbar' className={twMerge(baseClasses, className)}>\n {children}\n </nav>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface FlexColProps {\n children: React.ReactNode;\n className?: string;\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n}\n\nconst gapClasses = {\n xs: 'gap-[var(--deframe-widget-size-gap-xs)]',\n sm: 'gap-[var(--deframe-widget-size-gap-sm)]',\n md: 'gap-[var(--deframe-widget-size-gap-md)]',\n lg: 'gap-[var(--deframe-widget-size-gap-lg)]',\n} as const\n\nexport const FlexCol: React.FC<FlexColProps> = ({ children, className, gap = 'xs' }) => {\n const baseClasses = 'flex flex-col'\n\n return (\n <div data-test-id='flex-col' className={twMerge(baseClasses, gapClasses[gap], className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface FlexRowProps {\n children: React.ReactNode;\n className?: string;\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n}\n\nconst gapClasses = {\n xs: 'gap-[var(--deframe-widget-size-gap-xs)]',\n sm: 'gap-[var(--deframe-widget-size-gap-sm)]',\n md: 'gap-[var(--deframe-widget-size-gap-md)]',\n lg: 'gap-[var(--deframe-widget-size-gap-lg)]',\n} as const\n\nexport const FlexRow: React.FC<FlexRowProps> = ({ children, className, gap = 'xs' }) => {\n const baseClasses = 'flex items-center'\n\n return (\n <div data-test-id='flex-row' className={twMerge(baseClasses, gapClasses[gap], className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface ScrollableContentProps {\n children: React.ReactNode;\n className?: string;\n}\n\nexport const ScrollableContent: React.FC<ScrollableContentProps> = ({ children, className }) => {\n const baseClasses = 'flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]'\n\n return (\n <div data-test-id='scrollable-content' className={twMerge(baseClasses, className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { HiChevronLeft } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\nimport { TextHeading } from '../texts'\n\nexport interface DetailsHeaderProps {\n title: string;\n onBack?: () => void;\n className?: string;\n backAriaLabel?: string;\n}\n\nexport const DetailsHeader: React.FC<DetailsHeaderProps> = ({ title, onBack, className, backAriaLabel = 'Back' }) => {\n const baseClasses = 'w-full px-[var(--deframe-widget-size-padding-x-sm)] pr-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-md)] border-b border-[color:var(--deframe-widget-color-border-tertiary)] flex items-center'\n\n return (\n <div data-test-id='details-header' className={twMerge(baseClasses, className)}>\n <button\n data-test-id='details-header-back-button'\n onClick={onBack}\n className='w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-brand-primary)] cursor-pointer'\n aria-label={backAriaLabel}\n >\n <HiChevronLeft className='w-6 h-6 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </button>\n <div className='flex-1 flex items-center'>\n <TextHeading variant='h-large'>{title}</TextHeading>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface HighRiskBadgeProps {\n className?: string;\n label?: string;\n}\n\nexport const HighRiskBadge: React.FC<HighRiskBadgeProps> = ({ className, label }) => {\n const baseClasses = 'inline-flex justify-start items-start gap-[var(--deframe-widget-size-gap-xs)]'\n\n return (\n <div data-test-id='high-risk-badge' className={twMerge(baseClasses, className)}>\n <div\n data-size='Small'\n data-type='Failed'\n className='h-6 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] opacity-95 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_20%,transparent)] rounded-[var(--deframe-widget-size-radius-md)] outline outline-1 outline-offset-[-1px] outline-[color:var(--deframe-widget-color-state-error)] flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]'\n >\n <div className='flex justify-start items-center gap-[var(--deframe-widget-size-gap-sm)].5'>\n <div className='justify-start text-[color:var(--deframe-widget-color-state-error)] [font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-regular)] font-[var(--deframe-widget-font-family)] leading-4'>\n {label}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface MediumRiskBadgeProps {\n className?: string;\n label?: string;\n}\n\nexport const MediumRiskBadge: React.FC<MediumRiskBadgeProps> = ({ className, label }) => {\n const baseClasses = 'inline-flex justify-start items-start gap-[var(--deframe-widget-size-gap-xs)]'\n\n return (\n <div data-test-id='medium-risk-badge' className={twMerge(baseClasses, className)}>\n <div\n data-size='Small'\n data-type='Warning'\n className='h-6 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] opacity-95 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_20%,transparent)] rounded-[var(--deframe-widget-size-radius-md)] outline outline-1 outline-offset-[-1px] outline-[color:var(--deframe-widget-color-state-warning)] flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]'\n >\n <div className='flex justify-start items-center gap-[var(--deframe-widget-size-gap-sm)].5'>\n <div className='justify-start text-[color:var(--deframe-widget-color-state-warning)] [font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-regular)] font-[var(--deframe-widget-font-family)] leading-4'>\n {label}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface LowRiskBadgeProps {\n className?: string;\n label: string;\n}\n\nexport const LowRiskBadge: React.FC<LowRiskBadgeProps> = ({ className, label }) => {\n const baseClasses = 'inline-flex justify-start items-start gap-[var(--deframe-widget-size-gap-xs)]'\n\n return (\n <div data-test-id='low-risk-badge' className={twMerge(baseClasses, className)}>\n <div\n data-size='Small'\n data-type='Completed'\n className='h-6 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] opacity-95 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-success)_20%,transparent)] rounded-[var(--deframe-widget-size-radius-md)] outline outline-1 outline-offset-[-1px] outline-[color:var(--deframe-widget-color-state-success)] flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]'\n >\n <div className='flex justify-start items-center gap-[var(--deframe-widget-size-gap-sm)].5'>\n <div className='justify-start text-[color:var(--deframe-widget-color-state-success)] [font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-regular)] font-[var(--deframe-widget-font-family)] leading-4'>\n {label}\n </div>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface LoadingDotsProps {\n className?: string;\n}\n\n/**\n * Animated loading dots component with a bouncing effect\n * Used to indicate loading states throughout the application\n */\nexport const LoadingDots: React.FC<LoadingDotsProps> = ({ className = '' }) => {\n return (\n <span className={`flex gap-[var(--deframe-widget-size-gap-none)].5 ${className}`}>\n <span className='animate-bounce' style={{ animationDelay: '0ms', animationDuration: '1.4s' }}>.</span>\n <span className='animate-bounce' style={{ animationDelay: '200ms', animationDuration: '1.4s' }}>.</span>\n <span className='animate-bounce' style={{ animationDelay: '400ms', animationDuration: '1.4s' }}>.</span>\n </span>\n )\n}\n","import React from 'react'\nimport { HiOutlineClock } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\nimport { LoadingDots } from '../loading-dots'\n\nexport interface ProcessingBadgeProps {\n label?: string;\n className?: string;\n title?: string;\n size?: 'default' | 'compact';\n}\n\nexport const ProcessingBadge: React.FC<ProcessingBadgeProps> = ({\n label = 'Processing',\n className = '',\n title,\n size = 'default',\n}) => {\n const isCompact = size === 'compact'\n const baseClasses = [\n 'inline-flex max-w-fit items-center gap-[var(--deframe-widget-size-gap-xs)] rounded-[var(--deframe-widget-size-radius-full)] border',\n 'text-[color:var(--deframe-widget-color-state-info)]',\n 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-info)_18%,transparent)]',\n 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-info)_28%,transparent)]',\n ].join(' ')\n\n const sizeClasses = {\n default: 'px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)]',\n compact: 'px-[calc(var(--deframe-widget-size-padding-x-xs)+2px)] py-[2px]',\n } as const\n\n const processingBadgeClasses = twMerge(\n baseClasses,\n sizeClasses[isCompact ? 'compact' : 'default'],\n className\n )\n\n return (\n <div\n data-test-id='processing-badge'\n title={title}\n className={processingBadgeClasses}\n >\n <div className='flex min-w-0 items-center gap-[6px]'>\n <HiOutlineClock className={isCompact ? 'h-[12px] w-[12px] shrink-0' : 'h-[14px] w-[14px] shrink-0'} />\n <TextBody\n as='span'\n variant='text-small'\n className={twMerge(\n 'truncate text-[color:var(--deframe-widget-color-state-info)]',\n isCompact ? 'text-[11px] leading-[14px]' : ''\n )}\n >\n {label}\n </TextBody>\n </div>\n <span\n aria-hidden='true'\n className='flex shrink-0 items-center text-[color:var(--deframe-widget-color-state-info)] opacity-80'\n >\n <LoadingDots className={twMerge(isCompact ? 'text-[11px] leading-[14px]' : 'text-[12px] leading-[16px]')} />\n </span>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { AddressDisplay } from '../address'\n\n// Layout components\nexport interface FlexColCompProps {\n children: React.ReactNode;\n className?: string;\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n}\n\nconst gapClasses = {\n xs: 'gap-[var(--deframe-widget-size-gap-xs)]',\n sm: 'gap-[var(--deframe-widget-size-gap-sm)]',\n md: 'gap-[var(--deframe-widget-size-gap-md)]',\n lg: 'gap-[var(--deframe-widget-size-gap-lg)]',\n} as const\n\nexport const HistoryFlexCol: React.FC<FlexColCompProps> = ({ children, className, gap = 'xs' }) => (\n <div data-test-id='history-flex-col' className={twMerge('flex flex-col', gapClasses[gap], className)}>\n {children}\n </div>\n)\n\nexport interface FlexRowCompProps {\n children: React.ReactNode;\n className?: string;\n gap?: 'xs' | 'sm' | 'md' | 'lg';\n}\n\nexport const HistoryFlexRow: React.FC<FlexRowCompProps> = ({ children, className, gap = 'xs' }) => (\n <div data-test-id='history-flex-row' className={twMerge('flex items-center', gapClasses[gap], className)}>\n {children}\n </div>\n)\n\nexport const HistoryScrollableContent: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <div data-test-id='history-scrollable-content' className='flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]'>\n {children}\n </div>\n)\n\n// Typography components\nexport const TransactionTypeLabel: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='transaction-type-label' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {children}\n </p>\n)\n\nexport const StrategyName: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='strategy-name' className='[font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {children}\n </p>\n)\n\nexport const Amount: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='amount' className='[font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {children}\n </p>\n)\n\nexport const AmountInUsd: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='amount-in-usd' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~ {children}\n </p>\n)\n\nexport const EmptyValue: React.FC = () => (\n <p data-test-id='empty-value' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n -\n </p>\n)\n\n// Icon components\nexport interface TokenIconProps {\n src: string;\n alt: string;\n}\n\nexport const TokenIcon: React.FC<TokenIconProps> = ({ src, alt }) => (\n <img\n data-test-id='token-icon'\n src={src}\n alt={alt}\n className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]'\n onError={(e) => {\n const fallbackText = encodeURIComponent((alt || 'TOK').slice(0, 3).toUpperCase());\n (e.target as HTMLImageElement).src = `https://placehold.co/40x40?text=${fallbackText}`\n }}\n />\n)\n\n// Status badge\nconst STATUS_STYLES = {\n success: {\n bg: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-success)_12%,transparent)]',\n dot: 'bg-[var(--deframe-widget-color-state-success)]',\n },\n pending: {\n bg: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_12%,transparent)]',\n dot: 'bg-[var(--deframe-widget-color-state-warning)]',\n },\n failed: {\n bg: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_12%,transparent)]',\n dot: 'bg-[var(--deframe-widget-color-state-error)]',\n },\n refunded: {\n bg: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-text-secondary)_12%,transparent)]',\n dot: 'bg-[var(--deframe-widget-color-text-secondary)]',\n },\n} as const\n\nexport type StatusBadgeTone = keyof typeof STATUS_STYLES\nexport type HistoryDetailsStatus = 'SUCCESS' | 'PENDING' | 'FAILED' | 'REFUNDED'\n\nexport function resolveStatusBadgeTone (status: HistoryDetailsStatus = 'SUCCESS'): StatusBadgeTone {\n if (status === 'PENDING') return 'pending'\n if (status === 'FAILED') return 'failed'\n if (status === 'REFUNDED') return 'refunded'\n return 'success'\n}\n\nexport const StatusBadge: React.FC<{\n children: React.ReactNode;\n tone?: StatusBadgeTone;\n}> = ({ children, tone = 'success' }) => (\n <div data-test-id='status-badge' className={`${STATUS_STYLES[tone].bg} flex items-center gap-[var(--deframe-widget-size-gap-xs)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] rounded-[var(--deframe-widget-size-radius-lg)]`}>\n <span className={`w-2 h-2 rounded-[var(--deframe-widget-size-radius-full)] ${STATUS_STYLES[tone].dot}`} />\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {children}\n </span>\n </div>\n)\n\nexport const SuccessBadge: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <StatusBadge tone='success'>{children}</StatusBadge>\n)\n\n// Transaction ID with truncated display and copy button\nconst truncateHash = (hash: string, chars: number = 6): string => {\n if (hash.length <= chars * 2 + 3) return hash\n return `${hash.slice(0, chars + 2)}...${hash.slice(-chars)}`\n}\n\nexport interface TransactionIdProps {\n hash: string | null;\n}\n\nexport const TransactionId: React.FC<TransactionIdProps> = ({ hash }) => {\n if (!hash) {\n return <span data-test-id='transaction-id' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-primary)]'>-</span>\n }\n\n return (\n <div data-test-id='transaction-id' className='flex items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {truncateHash(hash)}\n </span>\n <AddressDisplay\n address={hash}\n className='border-none bg-transparent px-[var(--deframe-widget-size-padding-x-none)] py-[var(--deframe-widget-size-padding-y-none)] gap-[var(--deframe-widget-size-gap-none)]'\n textClassName='hidden'\n />\n </div>\n )\n}\n\n// Explorer link\nexport interface ExplorerLinkProps {\n href: string;\n children: React.ReactNode;\n}\n\nexport const ExplorerLink: React.FC<ExplorerLinkProps> = ({ href, children }) => (\n <a\n data-test-id='explorer-link'\n href={href}\n target='_blank'\n rel='noopener noreferrer'\n className='text-[color:var(--deframe-widget-color-brand-primary)] underline [font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-semibold)] font-[var(--deframe-widget-font-family)]'\n >\n {children}\n </a>\n)\n\n// Two-line value\nexport interface TwoLineValueProps {\n primary: React.ReactNode;\n secondary: React.ReactNode;\n}\n\nexport const TwoLineValue: React.FC<TwoLineValueProps> = ({ primary, secondary }) => (\n <HistoryFlexCol className='items-end'>\n <p data-test-id='two-line-value-primary' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)] [font-weight:var(--deframe-widget-font-weight-semibold)]'>\n {primary}\n </p>\n <p data-test-id='two-line-value-secondary' className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {secondary}\n </p>\n </HistoryFlexCol>\n)\n\n// Error state\nexport const NotFoundMessage: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <div data-test-id='not-found-message' className='flex flex-col items-center justify-center h-full'>\n <p className='text-[color:var(--deframe-widget-color-text-primary)]'>{children}</p>\n </div>\n)\n","import { IoCheckmarkOutline, IoTimeOutline, IoAlertCircleOutline } from 'react-icons/io5'\nimport type { TransactionStepStatus } from '../../types/transaction'\n\nexport interface StepStatusIconProps {\n status: TransactionStepStatus;\n}\n\n/**\n * Renders a step status icon based on the step status\n * Only three icon types: success (checkmark), timer (clock), and error (alert)\n */\nexport function StepStatusIcon ({ status }: StepStatusIconProps) {\n switch (status) {\n case 'completed':\n return (\n <div className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex items-center justify-center flex-shrink-0'>\n <IoCheckmarkOutline className='w-4 h-4 text-[color:var(--deframe-widget-color-state-success)]' />\n </div>\n )\n case 'processing':\n return (\n <div className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex items-center justify-center flex-shrink-0'>\n <IoTimeOutline className='w-4 h-4 text-[color:var(--deframe-widget-color-state-warning)]' />\n </div>\n )\n case 'failed':\n return (\n <div className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex items-center justify-center flex-shrink-0'>\n <IoAlertCircleOutline className='w-4 h-4 text-[color:var(--deframe-widget-color-state-error)]' />\n </div>\n )\n }\n}\n","import type { TransactionStep } from '../../types/transaction'\n\nexport interface StepStatusTextProps {\n step: TransactionStep;\n completedText: string;\n processingText: string;\n failedText: string;\n viewOnExplorerText: string;\n}\n\n/**\n * Renders the status text and optional explorer link for a step\n */\nexport function StepStatusText ({\n step,\n completedText,\n processingText,\n failedText,\n viewOnExplorerText,\n}: StepStatusTextProps) {\n // Use custom status text if provided\n if (step.statusText) {\n const textColorClass =\n step.status === 'completed'\n ? 'text-[color:var(--deframe-widget-color-text-primary)]'\n : step.status === 'processing'\n ? 'text-[color:var(--deframe-widget-color-text-secondary)]'\n : step.status === 'failed'\n ? 'text-[color:var(--deframe-widget-color-state-error)]'\n : 'text-[color:var(--deframe-widget-color-text-primary-disabled)]'\n\n return <span className={`[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] ${textColorClass}`}>{step.statusText}</span>\n }\n\n // Show explorer link if completed and URL exists\n if (step.status === 'completed' && step.explorerUrl) {\n return (\n <a\n href={step.explorerUrl}\n target='_blank'\n rel='noopener noreferrer'\n className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-brand-primary)] underline hover:no-underline'\n >\n {viewOnExplorerText}\n </a>\n )\n }\n\n // Default status text\n const defaultText =\n step.status === 'completed'\n ? completedText\n : step.status === 'processing'\n ? processingText\n : failedText\n\n const textColorClass =\n step.status === 'completed'\n ? 'text-[color:var(--deframe-widget-color-text-primary)]'\n : step.status === 'processing'\n ? 'text-[color:var(--deframe-widget-color-text-secondary)]'\n : 'text-[color:var(--deframe-widget-color-state-error)]'\n\n return <span className={`[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] ${textColorClass}`}>{defaultText}</span>\n}\n","import type { TransactionStep } from '../../types/transaction'\nimport { StepStatusText } from './StepStatusText'\n\nexport interface StepDisplayProps {\n step: TransactionStep;\n completedText: string;\n processingText: string;\n failedText: string;\n viewOnExplorerText: string;\n}\n\n/**\n * Renders a single processing step with icon, label, and status\n */\nexport function StepDisplay ({ step, completedText, processingText, failedText, viewOnExplorerText }: StepDisplayProps) {\n return (\n <div className='flex items-start justify-between gap-[var(--deframe-widget-size-gap-md)] w-full'>\n <div className='flex-1 min-w-0'>\n <p className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-primary)] [font-weight:var(--deframe-widget-font-weight-medium)]'>\n {step.label}\n </p>\n </div>\n <div className='flex-shrink-0'>\n {step.value\n ? (\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {step.value}\n </span>\n )\n : (\n <StepStatusText step={step} completedText={completedText} processingText={processingText} failedText={failedText} viewOnExplorerText={viewOnExplorerText} />\n )}\n </div>\n </div>\n )\n}\n","/**\n * Transaction Processing Details Component\n *\n * Displays a visual breakdown of transaction processing steps with status icons,\n * vertical connectors, and explorer links for deposit/withdraw flows.\n */\n\nimport { SummaryDetails } from '../details'\nimport type { TransactionStep } from '../../types/transaction'\nimport { StepStatusIcon } from './StepStatusIcon'\nimport { StepDisplay } from './StepDisplay'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface TransactionProcessingDetailsProps {\n /** Array of transaction steps to display */\n steps: TransactionStep[];\n /** Optional CSS class name */\n className?: string;\n /** Whether the details section is open by default */\n defaultOpen?: boolean;\n /** All translated strings for this component */\n labels: TransactionProcessingDetailsLabels;\n}\n\n/**\n * Displays transaction processing steps with visual breakdown using vertical connectors\n * Similar to SwapProcessingDetails but designed for deposit/withdraw flows\n */\nexport function TransactionProcessingDetails ({\n steps,\n className = 'bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]',\n defaultOpen = true,\n labels,\n}: TransactionProcessingDetailsProps) {\n if (!steps || steps.length === 0) {\n return null\n }\n\n const getProcessingSteps = () => {\n return (\n <div className='flex flex-col w-full'>\n {steps.map((step, index) => (\n <div key={`step-${index}`} className='flex gap-[var(--deframe-widget-size-gap-sm)]'>\n {/* Icon column with vertical connector */}\n <div className='flex flex-col items-center'>\n {step.status && <StepStatusIcon status={step.status} />}\n {index < steps.length - 1 && step.status && (\n <div className='w-px flex-1 min-h-[16px] bg-[var(--deframe-widget-color-bg-primary-dark)] my-[var(--deframe-widget-size-gap-xs)]' />\n )}\n </div>\n\n {/* Content column */}\n <div className='flex-1 pb-[var(--deframe-widget-size-padding-y-sm)] min-w-0'>\n <StepDisplay step={step} completedText={labels.completedText} processingText={labels.processingText} failedText={labels.failedText} viewOnExplorerText={labels.viewOnExplorerText} />\n </div>\n </div>\n ))}\n </div>\n )\n }\n\n // Build items array for SummaryDetails\n const items = [\n {\n label: '',\n value: getProcessingSteps(),\n valueClassName: 'flex flex-col gap-[var(--deframe-widget-size-gap-none)] w-full',\n },\n ]\n\n return (\n <SummaryDetails\n title={labels.title}\n items={items}\n defaultOpen={defaultOpen}\n className={className}\n />\n )\n}\n","import React from 'react'\nimport { DetailsHeader } from '../details-header'\nimport { SectionCard, FlexCol, FlexRow, ScrollableContent, BackgroundContainer } from '../layout'\nimport { InfoRow, InfoLabel, InfoValue } from '../info-display'\nimport {\n TransactionTypeLabel,\n Amount,\n AmountInUsd,\n TokenIcon,\n StatusBadge,\n TransactionId,\n ExplorerLink,\n TwoLineValue,\n resolveStatusBadgeTone,\n type HistoryDetailsStatus,\n} from './HistoryDetailsComponents'\nimport type { HistoryDetailsLabels } from './history-details-labels'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface HistoryAssetViewProps {\n iconUrl: string;\n symbol: string;\n amount: string;\n amountInUSD: string | null;\n}\n\nexport interface HistoryDetailsViewProps {\n transactionTypeLabel: string;\n symbol: string;\n amountWithSymbol: string;\n amountInUsdFormatted: string;\n shouldShowFlow: boolean;\n assetIn?: HistoryAssetViewProps;\n assetOut?: HistoryAssetViewProps;\n primaryAssetIconUrl: string;\n protocolLabel: string;\n statusLabel: string;\n txHash: string | null;\n date: string;\n explorerUrl: string | null;\n status?: HistoryDetailsStatus;\n processingSteps?: TransactionStep[];\n processingDetailsLabels?: TransactionProcessingDetailsLabels;\n onClose: () => void;\n labels: HistoryDetailsLabels;\n}\n\nexport const HistoryDepositDetailsView: React.FC<HistoryDetailsViewProps> = ({\n transactionTypeLabel,\n symbol,\n amountWithSymbol,\n amountInUsdFormatted,\n shouldShowFlow,\n assetIn,\n assetOut,\n primaryAssetIconUrl,\n protocolLabel,\n statusLabel,\n txHash,\n date,\n explorerUrl,\n status = 'SUCCESS',\n processingSteps,\n processingDetailsLabels,\n onClose,\n labels,\n}) => {\n return (\n <BackgroundContainer>\n <DetailsHeader title={labels.transactionDetailsTitle} onBack={onClose} />\n\n <ScrollableContent>\n <FlexCol gap='lg'>\n {/* Transaction Summary Card */}\n <SectionCard className='!p-[24px]'>\n <FlexCol gap='xs'>\n <TransactionTypeLabel>{transactionTypeLabel}</TransactionTypeLabel>\n\n {shouldShowFlow && assetIn && assetOut\n ? (\n <FlexCol gap='sm'>\n <FlexRow gap='sm'>\n <TokenIcon src={assetIn.iconUrl} alt={assetIn.symbol} />\n <FlexCol>\n <Amount>\n {assetIn.amount} {assetIn.symbol}\n </Amount>\n {assetIn.amountInUSD\n ? (\n <AmountInUsd>{assetIn.amountInUSD}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n <FlexRow gap='sm'>\n <TokenIcon src={assetOut.iconUrl} alt={assetOut.symbol} />\n <FlexCol>\n <Amount>\n {assetOut.amount} {assetOut.symbol}\n </Amount>\n {assetOut.amountInUSD\n ? (\n <AmountInUsd>{assetOut.amountInUSD}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n </FlexCol>\n )\n : (\n <FlexRow gap='sm'>\n <TokenIcon src={primaryAssetIconUrl} alt={symbol} />\n <FlexCol>\n <FlexRow gap='xs'>\n <Amount>{amountWithSymbol}</Amount>\n {amountInUsdFormatted !== '-'\n ? (\n <AmountInUsd>{amountInUsdFormatted}</AmountInUsd>\n )\n : null}\n </FlexRow>\n </FlexCol>\n </FlexRow>\n )}\n </FlexCol>\n </SectionCard>\n\n {/* Details Card */}\n <SectionCard className='!px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'>\n <FlexCol gap='sm'>\n <InfoRow borderBottom>\n <InfoLabel>{labels.currencyLabel}</InfoLabel>\n <InfoValue>{symbol}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.totalAmountLabel}</InfoLabel>\n <TwoLineValue primary={amountInUsdFormatted} secondary={amountWithSymbol} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.operationCostLabel}</InfoLabel>\n <InfoValue>{labels.operationCostSponsoredLabel}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.protocolLabel}</InfoLabel>\n <InfoValue>{protocolLabel}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.statusLabel}</InfoLabel>\n <StatusBadge tone={resolveStatusBadgeTone(status)}>{statusLabel}</StatusBadge>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.transactionIdLabel}</InfoLabel>\n <TransactionId hash={txHash} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.dateLabel}</InfoLabel>\n <InfoValue>{date}</InfoValue>\n </InfoRow>\n\n {explorerUrl && (\n <InfoRow>\n <InfoLabel>{labels.transactionLabel}</InfoLabel>\n <ExplorerLink href={explorerUrl}>{labels.viewOnExplorerLabel}</ExplorerLink>\n </InfoRow>\n )}\n </FlexCol>\n </SectionCard>\n\n {processingSteps?.length && processingDetailsLabels\n ? (\n <TransactionProcessingDetails\n steps={processingSteps}\n labels={processingDetailsLabels}\n defaultOpen\n />\n )\n : null}\n </FlexCol>\n </ScrollableContent>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\nimport { BackgroundContainer } from '../layout/BackgroundContainer'\nimport { DetailsHeader } from '../details-header'\nimport { SectionCard, FlexCol, FlexRow, ScrollableContent } from '../layout'\nimport { InfoRow, InfoLabel, InfoValue } from '../info-display'\nimport {\n TransactionTypeLabel,\n Amount,\n AmountInUsd,\n TokenIcon,\n StatusBadge,\n TransactionId,\n ExplorerLink,\n TwoLineValue,\n resolveStatusBadgeTone,\n} from './HistoryDetailsComponents'\nimport type { HistoryAssetViewProps, HistoryDetailsViewProps } from './HistoryDepositDetailsView'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\n\nexport type { HistoryDetailsViewProps, HistoryAssetViewProps }\n\nexport const HistoryWithdrawDetailsView: React.FC<HistoryDetailsViewProps> = ({\n transactionTypeLabel,\n symbol,\n amountWithSymbol,\n amountInUsdFormatted,\n shouldShowFlow,\n assetIn,\n assetOut,\n primaryAssetIconUrl,\n protocolLabel,\n statusLabel,\n txHash,\n date,\n explorerUrl,\n status = 'SUCCESS',\n processingSteps,\n processingDetailsLabels,\n onClose,\n labels,\n}) => {\n return (\n <BackgroundContainer>\n <DetailsHeader title={labels.transactionDetailsTitle} onBack={onClose} />\n\n <ScrollableContent>\n <FlexCol gap='lg'>\n <SectionCard className='!p-[24px]'>\n <FlexCol gap='xs'>\n <TransactionTypeLabel>{transactionTypeLabel}</TransactionTypeLabel>\n\n {shouldShowFlow && assetIn && assetOut\n ? (\n <FlexCol gap='sm'>\n <FlexRow gap='sm'>\n <TokenIcon src={assetIn.iconUrl} alt={assetIn.symbol} />\n <FlexCol>\n <Amount>\n {assetIn.amount} {assetIn.symbol}\n </Amount>\n {assetIn.amountInUSD\n ? (\n <AmountInUsd>{assetIn.amountInUSD}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n <FlexRow gap='sm'>\n <TokenIcon src={assetOut.iconUrl} alt={assetOut.symbol} />\n <FlexCol>\n <Amount>\n {assetOut.amount} {assetOut.symbol}\n </Amount>\n {assetOut.amountInUSD\n ? (\n <AmountInUsd>{assetOut.amountInUSD}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n </FlexCol>\n )\n : (\n <FlexRow gap='sm'>\n <TokenIcon src={primaryAssetIconUrl} alt={symbol} />\n <FlexCol>\n <FlexRow gap='xs'>\n <Amount>{amountWithSymbol}</Amount>\n {amountInUsdFormatted !== '-'\n ? (\n <AmountInUsd>{amountInUsdFormatted}</AmountInUsd>\n )\n : null}\n </FlexRow>\n </FlexCol>\n </FlexRow>\n )}\n </FlexCol>\n </SectionCard>\n\n <SectionCard className='!px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'>\n <FlexCol gap='sm'>\n <InfoRow borderBottom>\n <InfoLabel>{labels.currencyLabel}</InfoLabel>\n <InfoValue>{symbol}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.totalAmountLabel}</InfoLabel>\n <TwoLineValue primary={amountInUsdFormatted} secondary={amountWithSymbol} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.operationCostLabel}</InfoLabel>\n <InfoValue>{labels.operationCostSponsoredLabel}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.protocolLabel}</InfoLabel>\n <InfoValue>{protocolLabel}</InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.statusLabel}</InfoLabel>\n <StatusBadge tone={resolveStatusBadgeTone(status)}>{statusLabel}</StatusBadge>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.transactionIdLabel}</InfoLabel>\n <TransactionId hash={txHash} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel>{labels.dateLabel}</InfoLabel>\n <InfoValue>{date}</InfoValue>\n </InfoRow>\n\n {explorerUrl && (\n <InfoRow>\n <InfoLabel>{labels.transactionLabel}</InfoLabel>\n <ExplorerLink href={explorerUrl}>{labels.viewOnExplorerLabel}</ExplorerLink>\n </InfoRow>\n )}\n </FlexCol>\n </SectionCard>\n\n {processingSteps?.length && processingDetailsLabels\n ? (\n <TransactionProcessingDetails\n steps={processingSteps}\n labels={processingDetailsLabels}\n defaultOpen\n />\n )\n : null}\n </FlexCol>\n </ScrollableContent>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface InputFieldRegistration {\n name: string;\n onBlur: React.FocusEventHandler<HTMLInputElement>;\n ref: React.Ref<HTMLInputElement>;\n}\n\nexport interface SwapAmountInputViewProps {\n value: string;\n hasError: boolean;\n onChange: (value: string) => void;\n maxFractionDigits?: number;\n field?: InputFieldRegistration;\n ariaLabel?: string;\n className?: string;\n}\n\nexport const SwapAmountInputView: React.FC<SwapAmountInputViewProps> = ({\n value,\n hasError,\n onChange,\n maxFractionDigits = 6,\n field,\n ariaLabel = 'Amount to swap',\n className,\n}) => {\n const normalizeAmountInput = (raw: string) => {\n let val = raw.replace(/[^\\d.,]/g, '')\n const endsWithSeparator = /[.,]$/.test(val)\n val = val.replace(/,/g, '.')\n const firstDot = val.indexOf('.')\n if (firstDot !== -1) {\n const intPart = val.slice(0, firstDot)\n const fractional = val\n .slice(firstDot + 1)\n .replace(/\\./g, '')\n .slice(0, maxFractionDigits)\n if (fractional.length > 0) {\n val = `${intPart}.${fractional}`\n } else {\n val = endsWithSeparator ? `${intPart}.` : intPart\n }\n }\n if (val.startsWith('.')) {\n val = `0${val}`\n }\n return val\n }\n\n const baseClasses = '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] bg-transparent outline-none text-right w-full min-w-[120px] placeholder:text-[color:var(--deframe-widget-color-text-primary-disabled)]'\n const colorClasses = hasError\n ? 'text-[color:var(--deframe-widget-color-state-error)]'\n : 'text-[color:var(--deframe-widget-color-text-primary)]'\n\n return (\n <input\n data-test-id='swap-flow-amount-input'\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n autoComplete='off'\n aria-label={ariaLabel}\n min='0'\n step='any'\n value={value}\n className={twMerge(baseClasses, colorClasses, className)}\n {...field}\n onChange={(event) => {\n let normalized = normalizeAmountInput(event.target.value)\n if (normalized && parseFloat(normalized) < 0) {\n normalized = '0'\n }\n onChange(normalized)\n }}\n onWheel={(event: React.WheelEvent<HTMLInputElement>) => {\n event.currentTarget.blur()\n }}\n />\n )\n}\n","import React from 'react'\nimport { HiArrowRight } from 'react-icons/hi2'\nimport { ActionSheet } from '../action-sheet'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { TextBody, TextHeading } from '../texts'\nimport { HighRiskBadge } from '../badges/HighRiskBadge'\nimport { LowRiskBadge } from '../badges/LowRiskBadge'\nimport { MediumRiskBadge } from '../badges/MediumRiskBadge'\nimport { BackgroundContainer, Navbar } from '../layout'\nimport { CloseButton } from '../buttons'\n\nexport interface ChooseAStrategyActionsheetViewProps {\n isOpen: boolean;\n currentActionSheetId: string | null;\n assetName: string;\n apy: string;\n logoUrl: string;\n strategyId: string;\n riskLevel: 'low' | 'medium' | 'high';\n onStrategyClick: () => void;\n onClose: () => void;\n yieldLabel?: string;\n apyLabel?: string;\n riskBadgeLabels: { low: string; medium: string; high: string };\n closeAriaLabel?: string;\n}\n\nexport const ChooseAStrategyActionsheetView: React.FC<ChooseAStrategyActionsheetViewProps> = ({\n isOpen,\n currentActionSheetId,\n assetName,\n apy,\n logoUrl,\n riskLevel,\n onStrategyClick,\n onClose,\n yieldLabel,\n apyLabel = 'APY',\n riskBadgeLabels,\n closeAriaLabel = 'Close',\n}) => {\n const resolvedYieldLabel = yieldLabel ?? `Yield ${assetName}`\n\n const badges = {\n low: <LowRiskBadge label={riskBadgeLabels.low} />,\n medium: <MediumRiskBadge label={riskBadgeLabels.medium} />,\n high: <HighRiskBadge label={riskBadgeLabels.high} />,\n }\n\n const Badge = badges[riskLevel]\n\n return (\n <div data-test-id='choose-strategy-actionsheet' className='flex justify-center'>\n <ActionSheet\n id='choose-strategy'\n currentActionSheetId={currentActionSheetId}\n isOpen={isOpen}\n onClose={onClose}\n position='bottom'\n height='full'\n contentClassName='w-full max-w-[620px] mx-auto'\n >\n <BackgroundContainer className='flex flex-col h-full'>\n <Navbar>\n <CloseButton onClick={onClose} ariaLabel={closeAriaLabel} />\n </Navbar>\n <div className='flex flex-col flex-1 w-full px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)] overflow-hidden'>\n <div className='flex-shrink-0'>\n <TextHeading>{resolvedYieldLabel}</TextHeading>\n <br />\n </div>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)] w-full mt-[var(--deframe-widget-size-gap-md)] overflow-y-auto flex-1 min-h-0'>\n <ListItem className='flex-shrink-0' onClick={onStrategyClick}>\n <ListItemLeftSide>\n <img src={logoUrl} alt={assetName} className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)]' />\n </ListItemLeftSide>\n <ListItemContent className='gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody>{resolvedYieldLabel}</TextBody>\n <TextBody variant='text-small'>{Badge}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <div className='flex justify-center items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <span className='text-[color:var(--deframe-widget-color-state-success)]'>{apy}% {apyLabel}</span>\n <HiArrowRight className='w-4 h-4' />\n </div>\n </ListItemRightSide>\n </ListItem>\n </div>\n </div>\n </BackgroundContainer>\n </ActionSheet>\n </div>\n )\n}\n","import React from 'react'\nimport { TextBody, TextHeading } from '../texts'\nimport { SummaryDetails } from '../details'\nimport { PrimaryButton } from '../buttons'\nimport { BackgroundContainer } from '../layout'\nimport { DetailsHeader } from '../details-header'\n\nexport interface StrategyDetailsViewProps {\n logoUrl: string;\n title: string;\n description: string;\n strategyInfo: { label: string; value: string }[];\n onBack?: () => void;\n onDeposit?: () => void;\n headerTitle?: string;\n strategyInfoTitle?: string;\n depositButtonLabel?: string;\n backAriaLabel?: string;\n error?: string;\n notFoundMessage?: string;\n}\n\nexport const StrategyDetailsView: React.FC<StrategyDetailsViewProps> = ({\n logoUrl,\n title,\n description,\n strategyInfo,\n onBack,\n onDeposit,\n headerTitle = 'Details',\n strategyInfoTitle = 'Strategy Info',\n depositButtonLabel = 'Deposit',\n backAriaLabel = 'Back',\n error,\n notFoundMessage,\n}) => {\n if (error) {\n return (\n <BackgroundContainer>\n <div className='text-text-secondary dark:text-text-secondary-dark p-md'>{error}</div>\n </BackgroundContainer>\n )\n }\n\n if (notFoundMessage) {\n return (\n <BackgroundContainer>\n <div className='text-text-secondary dark:text-text-secondary-dark p-md'>{notFoundMessage}</div>\n </BackgroundContainer>\n )\n }\n\n return (\n <BackgroundContainer>\n <DetailsHeader title={headerTitle} onBack={onBack} backAriaLabel={backAriaLabel} />\n\n <div data-test-id='strategy-details-content' className='flex-1 min-h-0 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] py-[var(--deframe-widget-size-padding-y-lg)] pb-[var(--deframe-widget-size-padding-y-xxl)]'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-lg)] min-h-full'>\n <div className='inline-flex flex-col items-start gap-[var(--deframe-widget-size-gap-sm)]'>\n <img data-test-id='strategy-logo' src={logoUrl} alt={title} className='w-20 h-20 rounded-[var(--deframe-widget-size-radius-full)]' />\n <TextHeading variant='h5'>{title}</TextHeading>\n </div>\n\n <TextBody variant='text-small'>{description}</TextBody>\n\n <SummaryDetails\n title={strategyInfoTitle}\n items={strategyInfo}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n />\n </div>\n </div>\n\n <div data-test-id='strategy-details-footer' className='sticky bottom-0 left-0 right-0 border-t border-[color:var(--deframe-widget-color-border-tertiary)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'>\n <PrimaryButton onClick={onDeposit} className='w-full'>\n {depositButtonLabel}\n </PrimaryButton>\n </div>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\n\nexport interface ProgressIndicatorProps {\n /** Progress percentage (0-100) */\n progress: number;\n /** Optional className for custom styling */\n className?: string;\n}\n\nexport const ProgressIndicator: React.FC<ProgressIndicatorProps> = ({\n progress,\n className = ''\n}) => {\n const clampedProgress = Math.min(100, Math.max(0, progress))\n\n return (\n <div className={`relative h-[12px] w-full ${className}`}>\n <div className='absolute left-0 right-0 top-1/2 -translate-y-1/2 flex items-center'>\n <div\n className='h-[4px] bg-[var(--deframe-widget-color-brand-primary)] rounded-[var(--deframe-widget-size-radius-md)] transition-all duration-300'\n style={{ width: `${clampedProgress}%` }}\n />\n <div className='flex-1 h-[4px] bg-[var(--deframe-widget-color-bg-tertiary)] rounded-[var(--deframe-widget-size-radius-md)] ml-[var(--deframe-widget-size-gap-xs)]' />\n </div>\n </div>\n )\n}\n","import React, { useState, useEffect } from 'react'\nimport { MdOutlineSearch } from 'react-icons/md'\n\nexport interface SearchInputProps {\n /**\n * Placeholder text (default: \"Search\")\n */\n placeholder?: string;\n /**\n * Current value\n */\n value?: string;\n /**\n * Whether the input is disabled\n */\n disabled?: boolean;\n /**\n * Change handler — called immediately on every keystroke\n */\n onChange?: (value: string) => void;\n /**\n * Search handler — called immediately on every keystroke (debounce in the container)\n */\n onSearch?: (value: string) => void;\n /**\n * Additional CSS class names for container\n */\n className?: string;\n /**\n * Additional CSS class names for input element (e.g., custom background)\n */\n inputClassName?: string;\n /**\n * Whether the input should be auto focused\n */\n autoFocus?: boolean;\n /**\n * test id for the container\n */\n containerTestId?: string;\n /**\n * test id for the input element\n */\n inputTestId?: string;\n}\n\n/**\n * SearchInput - Search input component with search icon\n */\nexport const SearchInput: React.FC<SearchInputProps> = ({\n placeholder = 'Search',\n value: controlledValue,\n disabled = false,\n onChange,\n onSearch,\n className = '',\n inputClassName,\n autoFocus = false,\n containerTestId,\n inputTestId,\n}) => {\n const [internalValue, setInternalValue] = useState(controlledValue || '')\n\n // Update internal value when controlled value changes\n useEffect(() => {\n if (controlledValue !== undefined) {\n setInternalValue(controlledValue)\n }\n }, [controlledValue])\n\n const handleInputChange = (newValue: string) => {\n setInternalValue(newValue)\n onChange?.(newValue)\n onSearch?.(newValue)\n }\n\n return (\n <div className={`flex-1 flex items-center relative ${className}`} data-testid={containerTestId}>\n <input\n data-testid={inputTestId}\n type='text'\n value={internalValue}\n placeholder={placeholder}\n disabled={disabled}\n autoFocus={autoFocus}\n onChange={(e) => handleInputChange(e.target.value)}\n className={[\n 'w-full h-full rounded-[var(--deframe-widget-size-radius-xs)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] pr-[var(--deframe-widget-size-padding-x-xxl)] leading-normal tracking-wide',\n !inputClassName ? 'bg-[var(--deframe-widget-color-bg-secondary)]' : '',\n 'placeholder:text-[color:var(--deframe-widget-color-text-primary-disabled)] text-[color:var(--deframe-widget-color-text-primary)]',\n 'focus:outline-none focus:ring-2 focus:ring-brand-primary',\n disabled ? 'cursor-not-allowed opacity-50' : '',\n inputClassName || '',\n ].filter(Boolean).join(' ')}\n />\n <MdOutlineSearch className='w-4 h-4 text-[color:var(--deframe-widget-color-text-secondary)] absolute right-4' />\n </div>\n )\n}\n\nexport default SearchInput\n","import React from 'react'\nimport { MdOutlineSearchOff } from 'react-icons/md'\nimport { TextBody, TextHeading } from '../texts'\n\nexport interface SearchEmptyStateProps {\n title: string;\n description: string;\n}\n\nexport const SearchEmptyState: React.FC<SearchEmptyStateProps> = ({\n title,\n description,\n}) => {\n return (\n <div className='w-full py-[var(--deframe-widget-size-padding-y-md)] bg-[var(--deframe-widget-color-bg-primary)] rounded-[var(--deframe-widget-size-radius-md)] flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-sm)] h-full'>\n <div className='w-full flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-md)] py-[var(--deframe-widget-size-padding-y-xxl)]'>\n <div className='flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-md)] text-center'>\n <div className='w-20 h-20 bg-[var(--deframe-widget-color-bg-tertiary)] rounded-[var(--deframe-widget-size-radius-full)] flex justify-center items-center'>\n <MdOutlineSearchOff className='w-10 h-10 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n <TextHeading variant='h3'>{title}</TextHeading>\n </div>\n <div className='self-stretch text-center'>\n <TextBody variant='text-small'>{description}</TextBody>\n </div>\n </div>\n </div>\n )\n}\n","import { TextBody } from '../texts'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport React from 'react'\n\nexport interface CollapsibleSectionProps {\n /** Section title */\n title: string;\n /** Optional subtitle shown next to title */\n subtitle?: string;\n /** Content to show when expanded */\n children: React.ReactNode;\n /** Whether section is open by default (uncontrolled mode) */\n defaultOpen?: boolean;\n /** Controlled open state */\n open?: boolean;\n /** Callback when open state changes */\n onOpenChange?: (open: boolean) => void;\n /** Optional className */\n className?: string;\n /** Aria label text for \"Collapse\" */\n collapseText: string;\n /** Aria label text for \"Expand\" */\n expandText: string;\n}\n\nexport const CollapsibleSection: React.FC<CollapsibleSectionProps> = ({\n title,\n subtitle,\n children,\n defaultOpen = false,\n open: controlledOpen,\n onOpenChange,\n className = '',\n collapseText,\n expandText,\n}) => {\n const [internalOpen, setInternalOpen] = React.useState(defaultOpen)\n\n // Use controlled state if provided, otherwise use internal state\n const isOpen = controlledOpen !== undefined ? controlledOpen : internalOpen\n\n const handleToggle = () => {\n const newOpenState = !isOpen\n if (controlledOpen === undefined) {\n setInternalOpen(newOpenState)\n }\n onOpenChange?.(newOpenState)\n }\n\n return (\n <div className={`flex flex-col gap-[var(--deframe-widget-size-gap-sm)] w-full ${className}`}>\n <button\n type='button'\n onClick={handleToggle}\n className='flex items-center justify-between w-full text-left cursor-pointer'\n aria-expanded={isOpen}\n aria-label={`${isOpen ? collapseText : expandText} ${title}`}\n >\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody className='text-[color:var(--deframe-widget-color-text-primary-dark)] [font-weight:var(--deframe-widget-font-weight-medium)]'>{title}</TextBody>\n </div>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n {subtitle && (\n <TextBody variant='text-small'>{subtitle}</TextBody>\n )}\n <motion.svg\n className='w-5 h-5 text-[color:var(--deframe-widget-color-text-secondary)]'\n fill='none'\n stroke='currentColor'\n viewBox='0 0 24 24'\n animate={{ rotate: isOpen ? 180 : 0 }}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n >\n <path strokeLinecap='round' strokeLinejoin='round' strokeWidth={2} d='M5 9l7 7 7-7' />\n </motion.svg>\n </div>\n </button>\n <AnimatePresence>\n {isOpen && (\n <motion.div\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: 'auto', opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.2, ease: 'easeInOut' }}\n style={{ overflow: 'hidden' }}\n >\n {children}\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface TransactionScreenIconProps {\n type: 'processing' | 'success' | 'warning';\n gradient?: string;\n}\n\nexport const TransactionScreenIcon: React.FC<TransactionScreenIconProps> = ({\n type,\n gradient = 'linear-gradient(135deg, var(--deframe-widget-color-state-warning) 0%, color-mix(in srgb, var(--deframe-widget-color-state-warning) 78%, black) 100%)'\n}) => {\n if (type === 'success') {\n return (\n <div className='relative w-20 h-20'>\n <div className='w-full h-full rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-brand-primary)] flex items-center justify-center'>\n <svg className='w-8 h-8 text-[color:var(--deframe-widget-color-text-primary-dark)]' fill='none' viewBox='0 0 24 24' stroke='currentColor' strokeWidth={3}>\n <path strokeLinecap='round' strokeLinejoin='round' d='M5 13l4 4L19 7' />\n </svg>\n </div>\n </div>\n )\n }\n\n if (type === 'warning') {\n return (\n <div className='relative w-[83px] h-[83px]'>\n <div className='w-full h-full rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center' style={{ background: gradient }}>\n <svg className='w-8 h-8 text-[color:var(--deframe-widget-color-bg-primary)]' fill='currentColor' viewBox='0 0 32 32' xmlns='http://www.w3.org/2000/svg'>\n <path d='M16 5.33334C15.6444 5.33334 15.3111 5.51112 15.1111 5.8L5.11112 21.8C4.91112 22.0889 4.91112 22.4667 5.11112 22.7556C5.31112 23.0444 5.64445 23.2222 6.00001 23.2222H26C26.3556 23.2222 26.6889 23.0444 26.8889 22.7556C27.0889 22.4667 27.0889 22.0889 26.8889 21.8L16.8889 5.8C16.6889 5.51112 16.3556 5.33334 16 5.33334ZM16 10.6667C16.5333 10.6667 17 11.1333 17 11.6667V16C17 16.5333 16.5333 17 16 17C15.4667 17 15 16.5333 15 16V11.6667C15 11.1333 15.4667 10.6667 16 10.6667ZM16 19.3333C16.7333 19.3333 17.3333 19.9333 17.3333 20.6667C17.3333 21.4 16.7333 22 16 22C15.2667 22 14.6667 21.4 14.6667 20.6667C14.6667 19.9333 15.2667 19.3333 16 19.3333Z' />\n </svg>\n </div>\n </div>\n )\n }\n\n return (\n <div className='relative w-[83px] h-[83px]'>\n <div className='w-full h-full rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center' style={{ background: gradient }}>\n <svg width='11' height='10' viewBox='0 0 11 10' fill='none' xmlns='http://www.w3.org/2000/svg' className='w-8 h-8 text-[color:var(--deframe-widget-color-text-primary-dark)]'>\n <path d='M3.66659 8.33301H7.33325V7.08301C7.33325 6.62468 7.15374 6.23231 6.79471 5.90593C6.43568 5.57954 6.00409 5.41634 5.49992 5.41634C4.99575 5.41634 4.56415 5.57954 4.20513 5.90593C3.8461 6.23231 3.66659 6.62468 3.66659 7.08301V8.33301ZM5.49992 4.58301C6.00409 4.58301 6.43568 4.41981 6.79471 4.09342C7.15374 3.76704 7.33325 3.37467 7.33325 2.91634V1.66634H3.66659V2.91634C3.66659 3.37467 3.8461 3.76704 4.20513 4.09342C4.56415 4.41981 4.99575 4.58301 5.49992 4.58301ZM2.29159 9.16634C2.16172 9.16634 2.05287 9.12641 1.96502 9.04655C1.87718 8.96669 1.83325 8.86773 1.83325 8.74968C1.83325 8.63162 1.87718 8.53266 1.96502 8.4528C2.05287 8.37294 2.16172 8.33301 2.29159 8.33301H2.74992V7.08301C2.74992 6.6594 2.85877 6.26183 3.07648 5.8903C3.29419 5.51877 3.59784 5.2219 3.98742 4.99967C3.59784 4.77745 3.29419 4.48058 3.07648 4.10905C2.85877 3.73752 2.74992 3.33995 2.74992 2.91634V1.66634H2.29159C2.16172 1.66634 2.05287 1.62641 1.96502 1.54655C1.87718 1.46669 1.83325 1.36773 1.83325 1.24967C1.83325 1.13162 1.87718 1.03266 1.96502 0.952799C2.05287 0.872938 2.16172 0.833008 2.29159 0.833008H8.70825C8.83811 0.833008 8.94697 0.872938 9.03481 0.952799C9.12266 1.03266 9.16659 1.13162 9.16659 1.24967C9.16659 1.36773 9.12266 1.46669 9.03481 1.54655C8.94697 1.62641 8.83811 1.66634 8.70825 1.66634H8.24992V2.91634C8.24992 3.33995 8.14106 3.73752 7.92336 4.10905C7.70565 4.48058 7.402 4.77745 7.01242 4.99967C7.402 5.2219 7.70565 5.51877 7.92336 5.8903C8.14106 6.26183 8.24992 6.6594 8.24992 7.08301V8.33301H8.70825C8.83811 8.33301 8.94697 8.37294 9.03481 8.4528C9.12266 8.53266 9.16659 8.63162 9.16659 8.74968C9.16659 8.86773 9.12266 8.96669 9.03481 9.04655C8.94697 9.12641 8.83811 9.16634 8.70825 9.16634H2.29159Z' fill='currentColor' />\n </svg>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { BackgroundContainer } from '../layout'\nimport { DetailsHeader } from '../details-header'\nimport { CloseButton } from '../buttons'\nimport { ProgressIndicator } from '../progress'\nimport { TextHeading } from '../texts'\nimport { TransactionScreenIcon } from '../transaction-screen-icon/TransactionScreenIcon'\nimport type { TransactionScreenIconProps } from '../transaction-screen-icon/TransactionScreenIcon'\n\nexport interface TransactionScreenProps {\n progress: number;\n iconType: TransactionScreenIconProps['type'];\n iconGradient?: string;\n title: React.ReactNode;\n description: React.ReactNode;\n /** Renders a close (X) button in the top-left */\n onClose?: () => void;\n /** Renders a back-arrow header */\n onBack?: () => void;\n backTitle?: string;\n /** Bottom action bar (buttons) */\n actions?: React.ReactNode;\n /** Card / details content between hero and actions */\n children?: React.ReactNode;\n /** data-testid placed on the header wrapper div when onClose is used */\n testId?: string;\n}\n\nexport const TransactionScreen: React.FC<TransactionScreenProps> = ({\n progress,\n iconType,\n iconGradient,\n title,\n description,\n onClose,\n onBack,\n backTitle = '',\n actions,\n children,\n testId,\n}) => {\n return (\n <BackgroundContainer>\n <div className='flex flex-col h-full'>\n {onBack && <DetailsHeader title={backTitle} onBack={onBack} />}\n {onClose && (\n <div data-testid={testId} className='flex justify-start px-[var(--deframe-widget-size-padding-x-md)] pt-md'>\n <CloseButton onClick={onClose} />\n </div>\n )}\n\n <div className='w-full px-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)]'>\n <ProgressIndicator progress={progress} />\n </div>\n\n <div className='flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)] flex flex-col gap-[var(--deframe-widget-size-gap-lg)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-md)] pt-lg'>\n <TransactionScreenIcon type={iconType} gradient={iconGradient} />\n <TextHeading variant='h-large'>{title}</TextHeading>\n <div className='[font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)] text-center' style={{ maxWidth: '350px' }}>\n {description}\n </div>\n </div>\n\n {children}\n\n <div className='flex-1' />\n </div>\n\n {actions && (\n <div className='px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-md)]'>\n {actions}\n </div>\n )}\n </div>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { TextBody } from '../texts'\n\nexport interface TransactionScreenInvestmentCardProps {\n strategyName: React.ReactNode;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt?: string;\n amountUSD: React.ReactNode;\n amountToken: React.ReactNode;\n}\n\nexport const TransactionScreenInvestmentCard: React.FC<TransactionScreenInvestmentCardProps> = ({\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n}) => {\n const [hasImageError, setHasImageError] = React.useState(false)\n\n React.useEffect(() => {\n setHasImageError(false)\n }, [iconSrc])\n\n const shouldShowImage = Boolean(iconSrc) && !hasImageError\n const fallbackLabel = (iconAlt || '?').slice(0, 1).toUpperCase()\n\n return (\n <SectionCard className='!p-[22px]'>\n <div className='flex items-center justify-between'>\n <div className='flex flex-col items-start gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-lg)] [line-height:var(--deframe-widget-font-leading-lg)] [font-weight:var(--deframe-widget-font-weight-medium)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {strategyName}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {apyLabel} <TextBody as='span' className='text-[color:var(--deframe-widget-color-state-success)]'>{apyValue}</TextBody>\n </div>\n </div>\n <div className='flex items-start gap-[var(--deframe-widget-size-gap-sm)]'>\n <div className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex items-center justify-center'>\n {shouldShowImage\n ? <img src={iconSrc} alt={iconAlt} className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)]' onError={() => setHasImageError(true)} />\n : <span className='[font-size:var(--deframe-widget-font-size-xs)] [line-height:var(--deframe-widget-font-leading-xs)] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-secondary)]'>{fallbackLabel}</span>}\n </div>\n <div className='flex flex-col items-end'>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {amountUSD}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {amountToken}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n )\n}\n","import React from 'react'\n\nexport interface TokenWithChainBadgeProps {\n tokenLogoUrl?: string;\n tokenAlt?: string;\n chainId?: number;\n chainLogoUrl?: string;\n chainName?: string;\n}\n\nexport const TokenWithChainBadge: React.FC<TokenWithChainBadgeProps> = ({\n tokenLogoUrl,\n tokenAlt,\n chainLogoUrl,\n chainName,\n}) => {\n const fallbackText = encodeURIComponent((tokenAlt || 'TOK').slice(0, 3).toUpperCase())\n const fallbackSrc = `https://placehold.co/40x40?text=${fallbackText}`\n\n return (\n <div className='relative w-10 h-10'>\n <img\n src={tokenLogoUrl || fallbackSrc}\n alt={tokenAlt || ''}\n className='object-cover w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)]'\n onError={(e) => {\n (e.target as HTMLImageElement).src = fallbackSrc\n }}\n />\n {chainLogoUrl && (\n <img\n src={chainLogoUrl}\n alt={chainName}\n className='absolute object-cover w-6 h-6 p-px bg-[var(--deframe-widget-color-bg-primary-dark)] border rounded-[var(--deframe-widget-size-radius-full)] -bottom-1 -right-1 border-bg-default'\n onError={(e) => {\n (e.target as HTMLImageElement).style.display = 'none'\n }}\n />\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { TransactionScreen } from '../transaction-screen'\nimport { MdOutlineSwapHoriz } from 'react-icons/md'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\n\nexport interface SwapProcessingViewProps {\n fromTokenSymbol: string;\n fromTokenIcon: string;\n toTokenSymbol: string;\n toTokenIcon: string;\n formattedInputAmount: string;\n formattedOutputAmount: string;\n formattedInputAmountUSD: string;\n formattedOutputAmountUSD: string;\n progress: number;\n transactionSteps: TransactionStep[];\n onClose: () => void;\n onGoToHistory: () => void;\n titleText: string;\n descriptionPrefix: string;\n activityHistoryText: string;\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const SwapProcessingView: React.FC<SwapProcessingViewProps> = ({\n fromTokenSymbol,\n fromTokenIcon,\n toTokenSymbol,\n toTokenIcon,\n formattedInputAmount,\n formattedOutputAmount,\n formattedInputAmountUSD,\n formattedOutputAmountUSD,\n progress,\n transactionSteps,\n onClose,\n onGoToHistory,\n titleText,\n descriptionPrefix,\n activityHistoryText,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n testId='swap-processing-screen'\n onClose={onClose}\n progress={progress}\n iconType='processing'\n title={<span data-testid='swap-processing-title'>{titleText}</span>}\n description={\n <>\n {descriptionPrefix}{' '}\n <span\n className='[font-weight:var(--deframe-widget-font-weight-semibold)] underline underline-offset-2 cursor-pointer text-[color:var(--deframe-widget-color-brand-primary)]'\n onClick={onGoToHistory}\n >\n {activityHistoryText}.\n </span>\n </>\n }\n >\n <SectionCard className='!p-[22px]'>\n <div className='flex items-center justify-between w-full relative px-[var(--deframe-widget-size-padding-x-md)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-[var(--deframe-widget-color-brand-secondary)] rounded-[var(--deframe-widget-size-radius-full)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)] z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","/** Shared min-height across all Simple swap views */\nexport const SWAP_SIMPLE_MIN_HEIGHT = 520\n\n/** Shared fixed width across all Simple swap views */\nexport const SWAP_SIMPLE_WIDTH = 480\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { SWAP_SIMPLE_MIN_HEIGHT } from './constants'\n\n/**\n * Static skeleton simulating the SwapFormViewSimple layout.\n * Used behind glass-blur overlays in processing/success/failed/warning views.\n * Renders fake token cards with circles, text blocks, amounts, and a submit button.\n */\nexport function SwapFormSkeleton () {\n return (\n <div\n data-test-id='swap-form-skeleton'\n className={twMerge(\n 'relative',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n 'flex flex-col items-stretch gap-[var(--deframe-widget-size-gap-sm)]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n style={{ minHeight: SWAP_SIMPLE_MIN_HEIGHT }}\n >\n {/* ── History button (top-right) ── */}\n <div data-test-id='swap-form-skeleton-history' className='flex justify-end'>\n <div className='w-9 h-9 rounded-[var(--deframe-widget-size-radius-full)] border border-[color:var(--deframe-widget-color-border-secondary)]' />\n </div>\n\n {/* ── From card ── */}\n <SkeletonCard\n testId='swap-form-skeleton-from'\n symbol='USDC'\n network='ARBITRUM'\n amount='500'\n usd='≈ $499.87'\n balance='Saldo: 1 250.00 USDC'\n />\n\n {/* ── Swap direction button (centered, overlaps) ── */}\n <div data-test-id='swap-form-skeleton-swap-btn-wrapper' className='flex justify-center -my-[16px] relative z-[1]'>\n <div className={twMerge(\n 'w-10 h-10',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'flex items-center justify-center',\n 'text-[color:var(--deframe-widget-color-brand-primary)]'\n )}\n >\n <svg width='18' height='18' viewBox='0 0 24 24' fill='none' stroke='currentColor' strokeWidth='2.5' strokeLinecap='round' strokeLinejoin='round' aria-hidden='true'>\n <line x1='12' y1='5' x2='12' y2='19' />\n <polyline points='19 12 12 19 5 12' />\n </svg>\n </div>\n </div>\n\n {/* ── To card ── */}\n <SkeletonCard\n testId='swap-form-skeleton-to'\n symbol='ETH'\n network='ETHEREUM'\n amount='0.2061'\n usd='≈ $499.00'\n balance='Saldo: 41 ETH'\n />\n\n {/* ── Spacer ── */}\n <div className='flex-1' />\n\n {/* ── Submit button ── */}\n <div\n data-test-id='swap-form-skeleton-submit'\n className={twMerge(\n 'h-12',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[var(--deframe-widget-color-brand-primary)]',\n 'flex items-center justify-center',\n 'text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'text-[color:var(--deframe-widget-color-text-primary-dark)]'\n )}\n >\n Revisar Troca\n </div>\n </div>\n )\n}\n\n// ── SkeletonCard ────────────────────────────────────────────────────────────\n\ninterface SkeletonCardProps {\n testId: string\n symbol: string\n network: string\n amount: string\n usd: string\n balance: string\n}\n\nfunction SkeletonCard ({ testId, symbol, network, amount, usd, balance }: SkeletonCardProps) {\n const initials = symbol.slice(0, 2).toUpperCase()\n\n return (\n <div\n data-test-id={testId}\n className={twMerge(\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'\n )}\n >\n {/* Top row: token selector | divider | amount */}\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n {/* Token selector area */}\n <div className='inline-flex items-center gap-[10px] flex-shrink-0'>\n {/* Token icon with badge */}\n <div className='relative flex-shrink-0' style={{ width: 38, height: 38 }}>\n <div\n className='w-[38px] h-[38px] rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-brand-primary)] flex items-center justify-center text-[13px] [font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary-dark)]'\n >\n {initials}\n </div>\n <div className='absolute -bottom-0.5 -right-0.5 w-4 h-4 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] shadow-[0_0_0_2px_var(--deframe-widget-color-bg-secondary)] flex items-center justify-center text-[7px] [font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary-dark)]'>\n {network.slice(0, 2)}\n </div>\n </div>\n {/* Symbol + network */}\n <div className='flex flex-col items-start'>\n <span className='text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] leading-[1.2] text-[color:var(--deframe-widget-color-text-primary)]'>\n {symbol}\n </span>\n <span className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-tertiary)] uppercase tracking-[0.04em] leading-[1.2]'>\n {network}\n </span>\n </div>\n </div>\n\n {/* Divider */}\n <div className='w-px h-10 bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0' />\n\n {/* Amount + USD */}\n <div className='flex flex-col items-end flex-1 min-w-0'>\n <span className='text-[36px] [font-weight:var(--deframe-widget-font-weight-semibold)] [line-height:1.1] text-[color:var(--deframe-widget-color-text-primary)] text-right w-full'>\n {amount}\n </span>\n <span className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {usd}\n </span>\n </div>\n </div>\n\n {/* Balance row */}\n <div className='mt-[var(--deframe-widget-size-gap-sm)]'>\n <span className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {balance}\n </span>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport { SwapFormSkeleton } from '../swap-form-view/SwapFormSkeleton'\nimport { SWAP_SIMPLE_MIN_HEIGHT, SWAP_SIMPLE_WIDTH } from '../swap-form-view/constants'\n\n// ── Loading icon — rotating two-arrow sync, identical to SwapFeedbackOverlay ─\n\nfunction LoadingIcon () {\n const green = 'var(--deframe-widget-color-brand-primary)'\n const trackColor = 'color-mix(in srgb, var(--deframe-widget-color-brand-primary) 12%, transparent)'\n const sw = 2.8\n const aw = 2.4\n\n return (\n <motion.svg\n data-test-id='swap-processing-simple-loading-icon'\n width='56'\n height='56'\n viewBox='0 0 56 56'\n fill='none'\n aria-hidden='true'\n animate={{ rotate: 360 }}\n transition={{ duration: 1.6, repeat: Infinity, ease: 'linear' }}\n >\n <circle cx='28' cy='28' r='22' stroke={trackColor} strokeWidth={sw} />\n\n <path\n d='M 6.75 22.31 A 22 22 0 0 1 49.25 22.31'\n stroke={green}\n strokeWidth={sw}\n strokeLinecap='round'\n />\n <path\n d='M 45.0 18.1 L 49.25 22.31 L 51.0 16.5'\n stroke={green}\n strokeWidth={aw}\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n\n <path\n d='M 49.25 33.69 A 22 22 0 0 1 6.75 33.69'\n stroke={green}\n strokeWidth={sw}\n strokeLinecap='round'\n />\n <path\n d='M 11.0 37.9 L 6.75 33.69 L 5.0 39.5'\n stroke={green}\n strokeWidth={aw}\n strokeLinecap='round'\n strokeLinejoin='round'\n />\n </motion.svg>\n )\n}\n\n// ── SwapProcessingViewSimple ──────────────────────────────────────────────────\n\nexport const SwapProcessingViewSimple: React.FC = () => {\n return (\n <div\n data-test-id='swap-processing-simple-wrapper'\n className={twMerge(\n 'relative overflow-hidden',\n `w-[${SWAP_SIMPLE_WIDTH}px] max-w-[calc(100%-32px)] box-border`,\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n style={{ minHeight: SWAP_SIMPLE_MIN_HEIGHT }}\n >\n <div data-test-id='swap-processing-simple-skeleton'>\n <SwapFormSkeleton />\n </div>\n\n <div\n data-test-id='swap-processing-simple-screen'\n className={twMerge(\n 'absolute inset-0 z-10',\n 'flex flex-col items-center justify-center',\n 'gap-[var(--deframe-widget-size-gap-lg)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]',\n 'rounded-[inherit]',\n 'backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]',\n 'bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]'\n )}\n >\n <LoadingIcon />\n\n <div\n data-test-id='swap-processing-simple-copy'\n className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center'\n >\n <span\n data-test-id='swap-processing-simple-title'\n className={twMerge(\n '[font-size:12px] [line-height:1.25] [letter-spacing:0.10em] uppercase',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-brand-primary)]'\n )}\n >\n PROCESSANDO TRANSAÇÃO...\n </span>\n\n <span\n data-test-id='swap-processing-simple-subtitle'\n className={twMerge(\n '[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'max-w-[260px]'\n )}\n >\n Aguarde enquanto sua troca é confirmada.\n </span>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { TransactionScreen } from '../transaction-screen'\nimport { MdOutlineSwapHoriz } from 'react-icons/md'\nimport { TokenWithChainBadge } from '../token-with-chain-badge'\nimport { SectionCard } from '../layout'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface SwapCrossChainProcessingViewProps {\n fromTokenSymbol: string;\n fromTokenIcon: string;\n toTokenSymbol: string;\n toTokenIcon: string;\n originChainId?: number;\n destinationChainId?: number;\n originChainLogoUrl: string;\n originChainName: string;\n destinationChainLogoUrl: string;\n destinationChainName: string;\n formattedInputAmount: string;\n formattedOutputAmount: string;\n formattedInputAmountUSD: string;\n formattedOutputAmountUSD: string;\n progress: number;\n title: string;\n description: string;\n transactionSteps: TransactionStep[];\n onClose: () => void;\n onGoToHistory: () => void;\n viewHistoryText: string;\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const SwapCrossChainProcessingView: React.FC<SwapCrossChainProcessingViewProps> = ({\n fromTokenSymbol,\n fromTokenIcon,\n toTokenSymbol,\n toTokenIcon,\n originChainId,\n destinationChainId,\n originChainLogoUrl,\n originChainName,\n destinationChainLogoUrl,\n destinationChainName,\n formattedInputAmount,\n formattedOutputAmount,\n formattedInputAmountUSD,\n formattedOutputAmountUSD,\n progress,\n title,\n description,\n transactionSteps,\n onClose,\n onGoToHistory,\n viewHistoryText,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n onClose={onClose}\n progress={progress}\n iconType='processing'\n title={title}\n description={\n <>\n {description}{' '}\n <span\n className='[font-weight:var(--deframe-widget-font-weight-semibold)] underline cursor-pointer underline-offset-2 text-[color:var(--deframe-widget-color-brand-primary)]'\n onClick={onGoToHistory}\n >\n {viewHistoryText}\n </span>\n .\n </>\n }\n >\n <SectionCard className='!p-[22px]'>\n <div className='relative flex items-center justify-between w-full px-[var(--deframe-widget-size-padding-x-md)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <TokenWithChainBadge\n tokenLogoUrl={fromTokenIcon}\n tokenAlt={fromTokenSymbol}\n chainId={originChainId}\n chainLogoUrl={originChainLogoUrl}\n chainName={originChainName}\n />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute z-10 px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] -translate-x-1/2 -translate-y-1/2 rounded-[var(--deframe-widget-size-radius-full)] shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)] left-1/2 top-1/2 bg-[var(--deframe-widget-color-brand-secondary)]'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <TokenWithChainBadge\n tokenLogoUrl={toTokenIcon}\n tokenAlt={toTokenSymbol}\n chainId={destinationChainId}\n chainLogoUrl={destinationChainLogoUrl}\n chainName={destinationChainName}\n />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { TransactionScreen, TransactionScreenInvestmentCard } from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface InvestmentCrossChainProcessingViewProps {\n title: string;\n description: React.ReactNode;\n progress: number;\n strategyName: string;\n strategyIcon?: string;\n strategySymbol: string;\n apyLabel: string;\n apyValue: string;\n amountUSD: string;\n amountToken: string;\n onClose: () => void;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const InvestmentCrossChainProcessingView: React.FC<InvestmentCrossChainProcessingViewProps> = ({\n title,\n description,\n progress,\n strategyName,\n strategyIcon,\n strategySymbol,\n apyLabel,\n apyValue,\n amountUSD,\n amountToken,\n onClose,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='processing'\n title={title}\n description={description}\n onClose={onClose}\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={strategyIcon}\n iconAlt={strategySymbol}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport { SectionCard } from '../layout'\nimport { TransactionScreen } from '../transaction-screen'\nimport { MdOutlineSwapHoriz } from 'react-icons/md'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface SwapSignatureWarningViewProps {\n fromTokenSymbol: string;\n fromTokenIcon: string;\n toTokenSymbol: string;\n toTokenIcon: string;\n formattedInputAmount: string;\n formattedOutputAmount: string;\n formattedInputAmountUSD: string;\n formattedOutputAmountUSD: string;\n progress: number;\n errorTitle: string;\n errorDescription: string;\n transactionSteps: TransactionStep[];\n onCancel: () => void;\n onTryAgain: () => void;\n cancelButtonText: string;\n retryButtonText: string;\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const SwapSignatureWarningView: React.FC<SwapSignatureWarningViewProps> = ({\n fromTokenSymbol,\n fromTokenIcon,\n toTokenSymbol,\n toTokenIcon,\n formattedInputAmount,\n formattedOutputAmount,\n formattedInputAmountUSD,\n formattedOutputAmountUSD,\n progress,\n errorTitle,\n errorDescription,\n transactionSteps,\n onCancel,\n onTryAgain,\n cancelButtonText,\n retryButtonText,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n testId='swap-signature-warning-screen'\n onClose={onCancel}\n progress={progress}\n iconType='warning'\n title={<span data-testid='swap-signature-warning-title'>{errorTitle}</span>}\n description={errorDescription}\n actions={\n <div data-testid='swap-signature-warning-actions' className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton data-testid='swap-signature-warning-cancel' className='flex-1' onClick={onCancel}>\n {cancelButtonText}\n </SecondaryButton>\n <PrimaryButton data-testid='swap-signature-warning-retry' className='flex-1' onClick={onTryAgain}>\n {retryButtonText}\n </PrimaryButton>\n </div>\n }\n >\n <SectionCard className='!p-[22px]'>\n <div className='flex items-center justify-between w-full relative px-[var(--deframe-widget-size-padding-x-md)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-[var(--deframe-widget-color-brand-secondary)] rounded-[var(--deframe-widget-size-radius-full)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)] z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React, { useEffect } from 'react'\nimport { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport type { SwapSignatureWarningViewProps } from './SwapSignatureWarningView'\nimport { SwapFormSkeleton } from '../swap-form-view/SwapFormSkeleton'\nimport { SWAP_SIMPLE_MIN_HEIGHT, SWAP_SIMPLE_WIDTH } from '../swap-form-view/constants'\n\nexport type { SwapSignatureWarningViewProps }\n\n// -- Warning icon -- spring-in orange/amber circle + animated exclamation mark -\n\nfunction WarningIcon () {\n return (\n <motion.div\n data-test-id='swap-signature-warning-simple-icon'\n initial={{ scale: 0.55, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 20, delay: 0.05 }}\n className={twMerge(\n 'w-[84px] h-[84px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0',\n 'flex items-center justify-center',\n 'bg-[var(--deframe-widget-color-state-warning)]',\n 'shadow-[0_0_0_10px_color-mix(in_srgb,var(--deframe-widget-color-state-warning)_12%,transparent),0_0_32px_color-mix(in_srgb,var(--deframe-widget-color-state-warning)_22%,transparent)]'\n )}\n >\n <svg width='44' height='44' viewBox='0 0 44 44' fill='none' aria-hidden='true'>\n {/* Exclamation mark stem */}\n <motion.line\n x1='22' y1='10' x2='22' y2='26'\n stroke='white'\n strokeWidth='3.5'\n strokeLinecap='round'\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.3, delay: 0.2, ease: 'easeOut' }}\n />\n {/* Exclamation mark dot */}\n <motion.circle\n cx='22' cy='33'\n r='2'\n fill='white'\n initial={{ scale: 0, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ duration: 0.15, delay: 0.45, ease: 'easeOut' }}\n />\n </svg>\n </motion.div>\n )\n}\n\n// -- SwapSignatureWarningViewSimple ------------------------------------------------\n\n/**\n * Visual \"Simple\" variant of SwapSignatureWarningView.\n * Renders the SwapFormSkeleton behind a glass-blur overlay with a\n * spring-in warning icon, title, description and cancel / retry buttons.\n */\nexport const SwapSignatureWarningViewSimple: React.FC<Partial<SwapSignatureWarningViewProps>> = ({\n errorTitle,\n errorDescription,\n onCancel,\n}) => {\n useEffect(() => {\n const timer = setTimeout(() => {\n onCancel?.()\n }, 3000)\n return () => clearTimeout(timer)\n }, [onCancel])\n return (\n <div\n data-test-id='swap-signature-warning-simple-wrapper'\n className={twMerge(\n 'relative overflow-hidden',\n `min-h-[${SWAP_SIMPLE_MIN_HEIGHT}px]`,\n `w-[${SWAP_SIMPLE_WIDTH}px] max-w-[calc(100%-32px)] box-border`,\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n >\n {/* Skeleton background */}\n <div data-test-id='swap-signature-warning-simple-skeleton'>\n <SwapFormSkeleton />\n </div>\n\n {/* Glass-blur overlay */}\n <div\n data-test-id='swap-signature-warning-simple-screen'\n className={twMerge(\n 'absolute inset-0 z-10',\n 'flex flex-col items-center justify-center',\n 'gap-[var(--deframe-widget-size-gap-lg)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]',\n 'rounded-[inherit]',\n 'backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]',\n 'bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]'\n )}\n >\n <WarningIcon />\n\n {/* Copy block */}\n <div\n data-test-id='swap-signature-warning-simple-copy'\n className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center'\n >\n <span\n data-test-id='swap-signature-warning-simple-title'\n className={twMerge(\n '[font-size:22px] [line-height:1.25]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n >\n {errorTitle}\n </span>\n\n <span\n data-test-id='swap-signature-warning-simple-subtitle'\n className={twMerge(\n '[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'max-w-[260px]'\n )}\n >\n {errorDescription}\n </span>\n </div>\n\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { PrimaryButton } from '../buttons'\nimport { SectionCard } from '../layout'\nimport { TransactionScreen } from '../transaction-screen'\nimport { MdOutlineSwapHoriz } from 'react-icons/md'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { SwapSuccessLabels } from '../../types/swap-success-labels'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\n\nexport interface SwapSuccessViewProps {\n fromTokenSymbol: string;\n fromTokenIcon: string;\n toTokenSymbol: string;\n toTokenIcon: string;\n formattedInputAmount: string;\n formattedOutputAmount: string;\n formattedInputAmountUSD: string;\n formattedOutputAmountUSD: string;\n transactionSteps: TransactionStep[];\n onClose: () => void;\n onStartNewSwap: () => void;\n onGoToWallet: () => void;\n labels: SwapSuccessLabels;\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const SwapSuccessView: React.FC<SwapSuccessViewProps> = ({\n fromTokenSymbol,\n fromTokenIcon,\n toTokenSymbol,\n toTokenIcon,\n formattedInputAmount,\n formattedOutputAmount,\n formattedInputAmountUSD,\n formattedOutputAmountUSD,\n transactionSteps,\n onClose,\n onStartNewSwap,\n onGoToWallet,\n labels,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n testId='swap-success-screen'\n onClose={onClose}\n progress={100}\n iconType='success'\n title={<span data-testid='swap-success-title'>{labels.title}</span>}\n description={\n <>\n {labels.descriptionPrefix} <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)]'>{formattedInputAmount} {fromTokenSymbol}</strong> {labels.descriptionMiddle}{' '}\n <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)]'>{formattedOutputAmount} {toTokenSymbol}</strong>\n <br />\n {labels.descriptionSuffix}{' '}\n <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-brand-primary)] cursor-pointer' onClick={onGoToWallet}>\n {labels.walletLinkText}\n </strong>\n </>\n }\n actions={\n <div data-testid='swap-start-new-wrapper' className='w-full'>\n <PrimaryButton data-testid='swap-start-new-button' className='w-full' onClick={onStartNewSwap}>\n {labels.startNewSwapButton}\n </PrimaryButton>\n </div>\n }\n >\n <SectionCard className='!p-[22px]'>\n <div className='flex items-center justify-between w-full relative px-[var(--deframe-widget-size-padding-x-md)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-[var(--deframe-widget-color-brand-secondary)] rounded-[var(--deframe-widget-size-radius-full)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)] z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport { SwapFormSkeleton } from '../swap-form-view/SwapFormSkeleton'\nimport { SWAP_SIMPLE_MIN_HEIGHT, SWAP_SIMPLE_WIDTH } from '../swap-form-view/constants'\n\n// ── Animated success icon ─────────────────\n\nfunction SuccessIcon () {\n return (\n <motion.div\n data-test-id='swap-success-simple-icon'\n initial={{ scale: 0.55, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 20, delay: 0.05 }}\n className={twMerge(\n 'w-[84px] h-[84px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0',\n 'flex items-center justify-center',\n 'bg-[var(--deframe-widget-color-state-success)]',\n 'shadow-[0_0_0_10px_color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent),0_0_32px_color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_22%,transparent)]'\n )}\n >\n <svg width='44' height='44' viewBox='0 0 44 44' fill='none' aria-hidden='true'>\n <motion.path\n d='M10 22 L18 30 L34 14'\n stroke='white'\n strokeWidth='3.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.45, delay: 0.2, ease: 'easeOut' }}\n />\n </svg>\n </motion.div>\n )\n}\n\n// ── SwapSuccessViewSimple ─────────────────────────────────────────────────────\n\nexport const SwapSuccessViewSimple: React.FC = () => {\n return (\n <div\n data-test-id='swap-success-simple-wrapper'\n className={twMerge(\n 'relative overflow-hidden',\n `min-h-[${SWAP_SIMPLE_MIN_HEIGHT}px]`,\n `w-[${SWAP_SIMPLE_WIDTH}px] max-w-[calc(100%-32px)] box-border`,\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n >\n <div data-test-id='swap-success-simple-skeleton'>\n <SwapFormSkeleton />\n </div>\n\n <div\n data-test-id='swap-success-simple-screen'\n className={twMerge(\n 'absolute inset-0 z-10',\n 'flex flex-col items-center justify-center',\n 'gap-[var(--deframe-widget-size-gap-lg)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]',\n 'rounded-[inherit]',\n 'backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]',\n 'bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]'\n )}\n >\n <SuccessIcon />\n\n <div\n data-test-id='swap-success-simple-copy'\n className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center'\n >\n <span\n data-test-id='swap-success-simple-title'\n className={twMerge(\n '[font-size:var(--deframe-widget-font-size-xl)]',\n '[line-height:var(--deframe-widget-font-leading-xl)]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n >\n Troca Aprovada!\n </span>\n\n <span\n data-test-id='swap-success-simple-subtitle'\n className={twMerge(\n '[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'max-w-[260px]'\n )}\n >\n Seu saldo foi atualizado.\n </span>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport { SectionCard } from '../layout'\nimport { TransactionScreen } from '../transaction-screen'\nimport { MdOutlineSwapHoriz } from 'react-icons/md'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\n\nexport interface SwapTransactionFailedViewProps {\n fromTokenSymbol: string;\n fromTokenIcon: string;\n toTokenSymbol: string;\n toTokenIcon: string;\n formattedInputAmount: string;\n formattedOutputAmount: string;\n formattedInputAmountUSD: string;\n formattedOutputAmountUSD: string;\n progress: number;\n errorTitle: string;\n errorDescription: string;\n transactionSteps: TransactionStep[];\n hasExplorerLink: boolean;\n onBack: () => void;\n onViewExplorer: () => void;\n onTryAgain: () => void;\n viewOnExplorerText: string;\n retryButtonText: string;\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const SwapTransactionFailedView: React.FC<SwapTransactionFailedViewProps> = ({\n fromTokenSymbol,\n fromTokenIcon,\n toTokenSymbol,\n toTokenIcon,\n formattedInputAmount,\n formattedOutputAmount,\n formattedInputAmountUSD,\n formattedOutputAmountUSD,\n progress,\n errorTitle,\n errorDescription,\n transactionSteps,\n hasExplorerLink,\n onBack,\n onViewExplorer,\n onTryAgain,\n viewOnExplorerText,\n retryButtonText,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n testId='swap-failed-screen'\n onClose={onBack}\n progress={progress}\n iconType='warning'\n iconGradient='linear-gradient(135deg, var(--deframe-widget-color-state-error) 0%, color-mix(in srgb, var(--deframe-widget-color-state-error) 78%, black) 100%)'\n title={<span data-testid='swap-failed-title'>{errorTitle}</span>}\n description={errorDescription}\n actions={\n <div data-testid='swap-failed-actions' className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton data-testid='swap-failed-view-explorer' className='flex-1' onClick={onViewExplorer} disabled={!hasExplorerLink}>\n {viewOnExplorerText}\n </SecondaryButton>\n <PrimaryButton data-testid='swap-failed-retry' className='flex-1' onClick={onTryAgain}>\n {retryButtonText}\n </PrimaryButton>\n </div>\n }\n >\n <SectionCard className='!p-[22px]'>\n <div className='flex items-center justify-between w-full relative px-[var(--deframe-widget-size-padding-x-md)]'>\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2 bg-[var(--deframe-widget-color-brand-secondary)] rounded-[var(--deframe-widget-size-radius-full)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-sm)] shadow-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)] z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-[var(--deframe-widget-size-radius-full)]' />\n <div className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport type { SwapTransactionFailedViewProps } from './SwapTransactionFailedView'\nimport { SwapFormSkeleton } from '../swap-form-view/SwapFormSkeleton'\nimport { SWAP_SIMPLE_MIN_HEIGHT, SWAP_SIMPLE_WIDTH } from '../swap-form-view/constants'\n\nexport type { SwapTransactionFailedViewProps }\n\n// ── Error icon — spring-in red circle + animated X, identical to SwapFeedbackOverlay ─\n\nfunction ErrorIcon () {\n return (\n <motion.div\n data-test-id='swap-failed-simple-icon'\n initial={{ scale: 0.55, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n transition={{ type: 'spring', stiffness: 300, damping: 20, delay: 0.05 }}\n className={twMerge(\n 'w-[84px] h-[84px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0',\n 'flex items-center justify-center',\n 'bg-[var(--deframe-widget-color-state-error)]',\n 'shadow-[0_0_0_10px_color-mix(in_srgb,var(--deframe-widget-color-state-error)_12%,transparent),0_0_32px_color-mix(in_srgb,var(--deframe-widget-color-state-error)_22%,transparent)]'\n )}\n >\n <svg width='44' height='44' viewBox='0 0 44 44' fill='none' aria-hidden='true'>\n <motion.line\n x1='14' y1='14' x2='30' y2='30'\n stroke='white'\n strokeWidth='3.5'\n strokeLinecap='round'\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.25, delay: 0.2, ease: 'easeOut' }}\n />\n <motion.line\n x1='30' y1='14' x2='14' y2='30'\n stroke='white'\n strokeWidth='3.5'\n strokeLinecap='round'\n initial={{ pathLength: 0 }}\n animate={{ pathLength: 1 }}\n transition={{ duration: 0.25, delay: 0.38, ease: 'easeOut' }}\n />\n </svg>\n </motion.div>\n )\n}\n\n// ── SwapTransactionFailedViewSimple ───────────────────────────────────────────\n\n/**\n * Visual variant of SwapTransactionFailedView.\n * Design identical to the SwapPanel ErrorOverlay:\n * glass-blur transparent background, spring-in red circle with animated X,\n * bold title + muted subtitle. No chrome, no transaction details.\n */\nexport const SwapTransactionFailedViewSimple: React.FC<Partial<SwapTransactionFailedViewProps>> = ({\n errorTitle,\n errorDescription,\n}) => {\n return (\n <div\n data-test-id='swap-failed-simple-wrapper'\n className={twMerge(\n 'relative overflow-hidden',\n `min-h-[${SWAP_SIMPLE_MIN_HEIGHT}px]`,\n `w-[${SWAP_SIMPLE_WIDTH}px] max-w-[calc(100%-32px)] box-border`,\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n >\n <div data-test-id='swap-failed-simple-skeleton'>\n <SwapFormSkeleton />\n </div>\n\n <div\n data-test-id='swap-failed-simple-screen'\n className={twMerge(\n 'absolute inset-0 z-10',\n 'flex flex-col items-center justify-center',\n 'gap-[var(--deframe-widget-size-gap-lg)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-lg)]',\n 'rounded-[inherit]',\n 'backdrop-blur-[12px] [-webkit-backdrop-filter:blur(12px)]',\n 'bg-[color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)]'\n )}\n >\n <ErrorIcon />\n\n <div\n data-test-id='swap-failed-simple-copy'\n className='flex flex-col items-center gap-[var(--deframe-widget-size-gap-sm)] text-center'\n >\n <span\n data-test-id='swap-failed-simple-title'\n className={twMerge(\n '[font-size:22px] [line-height:1.25]',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n >\n Troca Falhou\n </span>\n\n <span\n data-test-id='swap-failed-simple-subtitle'\n className={twMerge(\n '[font-size:var(--deframe-widget-font-size-md)] [line-height:1.6]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'max-w-[260px]'\n )}\n >\n Tente novamente mais tarde.\n </span>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { ActionSheet } from '../action-sheet'\nimport { BackgroundContainer, Navbar } from '../layout'\nimport { CloseButton, TertiaryButton } from '../buttons'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { TextBody, TextHeading } from '../texts'\nimport { SearchInput } from '../search-input'\nimport { SearchEmptyState } from '../search-empty-state'\nimport { LoadingDots } from '../loading-dots'\nimport type { ChooseAnAssetSwapLabels } from '../../types/choose-an-asset-swap-labels'\nimport type { TokenData } from '../../types/token-data'\nimport type { BalanceDomain } from '../../types/balance-domain'\n\nexport type { TokenData, BalanceDomain }\n\nexport interface ChooseAnAssetSwapViewProps {\n actionSheetId: string;\n isOpen: boolean;\n currentActionSheetId: string | null;\n onClose: () => void;\n onSearch: (value: string) => void;\n autoFocus: boolean;\n displayedTokens: TokenData[];\n hasMore: boolean;\n onLoadMore: () => void;\n findBalance: (token: TokenData) => BalanceDomain | undefined;\n isFetching: boolean;\n onAssetClick: (token: TokenData) => void;\n labels: ChooseAnAssetSwapLabels;\n formatTokenAmount: (amountUI: string, priceUSD: number, decimals: number) => string;\n formatCurrencyValue: (value: number) => string;\n}\n\nexport const ChooseAnAssetSwapView: React.FC<ChooseAnAssetSwapViewProps> = ({\n actionSheetId,\n isOpen,\n currentActionSheetId,\n onClose,\n onSearch,\n autoFocus,\n displayedTokens,\n hasMore,\n onLoadMore,\n findBalance,\n isFetching,\n onAssetClick,\n labels,\n formatTokenAmount,\n formatCurrencyValue,\n}) => {\n const [searchValue, setSearchValue] = React.useState('')\n\n const handleSearch = (value: string) => {\n setSearchValue(value)\n onSearch(value)\n }\n\n return (\n <div className='flex justify-center' data-testid={`swap-token-actionsheet-wrapper-${actionSheetId}`}>\n <ActionSheet\n id={actionSheetId}\n currentActionSheetId={currentActionSheetId}\n isOpen={isOpen}\n onClose={onClose}\n position='bottom'\n height='full'\n contentClassName='w-full max-w-[620px] mx-auto'\n >\n <BackgroundContainer className='flex flex-col h-full'>\n <Navbar>\n <CloseButton testId={`swap-token-actionsheet-close-${actionSheetId}`} onClick={onClose} />\n </Navbar>\n <div className='flex flex-col flex-1 w-full px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)] overflow-hidden'>\n <div className='flex-shrink-0'>\n <TextHeading>{labels.title}</TextHeading>\n <br />\n <SearchInput\n onSearch={handleSearch}\n placeholder={labels.searchPlaceholder}\n autoFocus={autoFocus}\n inputClassName='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-secondary)]'\n containerTestId={`swap-token-search-container-${actionSheetId}`}\n inputTestId={`swap-token-search-input-${actionSheetId}`}\n />\n </div>\n {(searchValue && displayedTokens.length === 0 && !isFetching)\n ? (\n <SearchEmptyState title={labels.searchEmptyTitle} description={labels.searchEmptyDescription} />\n )\n : (\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)] w-full mt-[var(--deframe-widget-size-gap-md)] overflow-y-auto flex-1 min-h-0'>\n {isFetching && (\n <div className='flex justify-center items-center w-full py-[var(--deframe-widget-size-padding-y-md)]'>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {labels.searchingText}\n </TextBody>\n <LoadingDots />\n </div>\n </div>\n )}\n {displayedTokens.map((token, index) => {\n const balance = findBalance(token)\n const tokenPriceUSD = Number(balance?.priceUSD) || 0\n const formattedBalance = balance?.amountUI\n ? formatTokenAmount(balance.amountUI, tokenPriceUSD, 2)\n : '0'\n\n return (\n <ListItem\n className='w-full flex-shrink-0'\n onClick={() => onAssetClick(token)}\n key={`token-${token.address}-${index}`}\n data-testid={`swap-token-item-${token.symbol.toLowerCase()}-${token.chainId}`}\n data-address={token.address}\n data-chain-id={token.chainId}\n data-symbol={token.symbol}\n >\n <ListItemLeftSide>\n <img src={token.logoURI || ''} alt={token.name} className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)]' />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{token.name}</TextBody>\n <TextBody variant='text-small'>{token.symbol}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <TextBody>{formattedBalance}</TextBody>\n <TextBody variant='text-small'>{formatCurrencyValue(Number(balance?.amountInUSD) || 0)}</TextBody>\n </ListItemRightSide>\n </ListItem>\n )\n })}\n {hasMore && (\n <div className='flex justify-center items-center w-full py-[var(--deframe-widget-size-padding-y-md)] flex-shrink-0'>\n <TertiaryButton onClick={onLoadMore}>{labels.loadMoreButton}</TertiaryButton>\n </div>\n )}\n </div>\n )}\n </div>\n </BackgroundContainer>\n </ActionSheet>\n </div>\n )\n}\n","import React from 'react'\nimport { HiChevronDown } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\n\nexport interface SwapTokenSelectorViewProps {\n token: { symbol: string; logoURI?: string } | null;\n onClick: () => void;\n testId?: string;\n selectTokenLabel?: string;\n className?: string;\n}\n\nexport const SwapTokenSelectorView: React.FC<SwapTokenSelectorViewProps> = ({\n token,\n onClick,\n testId = 'swap-token-selector',\n selectTokenLabel = 'Select token',\n className,\n}) => {\n const baseClasses = 'h-[56px] border border-[color:var(--deframe-widget-color-border-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] overflow-hidden hover:border-[color:var(--deframe-widget-color-border-primary)] transition-colors flex items-center px-[var(--deframe-widget-size-padding-x-sm)] py-[6px] w-full cursor-pointer'\n\n return (\n <button\n data-test-id={testId}\n type='button'\n onClick={onClick}\n className={twMerge(baseClasses, className)}\n aria-label={token ? token.symbol : selectTokenLabel}\n >\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)] flex-1'>\n {token\n ? (\n <>\n {token.logoURI\n ? (\n <img src={token.logoURI} alt={token.symbol} className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)]' />\n )\n : (\n <div className='w-6 h-6 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-secondary)] text-[color:var(--deframe-widget-color-text-secondary)] flex items-center justify-center text-[10px] [font-weight:var(--deframe-widget-font-weight-semibold)]'>\n {(token.symbol || '').slice(0, 3).toUpperCase()}\n </div>\n )}\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-primary)]'>\n {token.symbol}\n </TextBody>\n </>\n )\n : (\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {selectTokenLabel}\n </TextBody>\n )}\n </div>\n <div className='flex items-center justify-center w-[18px] h-[18px]'>\n <HiChevronDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </button>\n )\n}\n","import React from 'react'\nimport { HiChevronDown } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\n\nexport interface SwapNetworkSelectorViewProps {\n chainLabel: string;\n chainImage?: string;\n onClick: () => void;\n directionLabel?: string;\n testId?: string;\n className?: string;\n}\n\nexport const SwapNetworkSelectorView: React.FC<SwapNetworkSelectorViewProps> = ({\n chainLabel,\n chainImage,\n onClick,\n directionLabel = 'De',\n testId = 'swap-network-selector',\n className,\n}) => {\n const baseClasses = 'flex flex-row items-center gap-[var(--deframe-widget-size-gap-xs)]'\n\n return (\n <div data-test-id={testId} className={twMerge(baseClasses, className)}>\n <TextBody as='span' variant='text-small' className='tracking-wide text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {directionLabel}\n </TextBody>\n <button\n data-testid={testId}\n type='button'\n onClick={onClick}\n className='ml-[var(--deframe-widget-size-gap-lg)] bg-[var(--deframe-widget-color-bg-tertiary)] border border-[color:var(--deframe-widget-color-border-tertiary)] rounded-[var(--deframe-widget-size-radius-md)] flex items-center gap-[var(--deframe-widget-size-gap-xs)] px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] hover:border-[color:var(--deframe-widget-color-border-secondary)] transition-colors [font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)] cursor-pointer'\n aria-label={`${directionLabel} ${chainLabel}`}\n >\n {chainImage\n ? (\n <img src={chainImage} alt={chainLabel} className='w-3 h-3 rounded-[var(--deframe-widget-size-radius-full)]' />\n )\n : null}\n <span>{chainLabel}</span>\n <div className='flex items-center justify-center w-[18px] h-[18px]'>\n <HiChevronDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </button>\n </div>\n )\n}\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { SwapTokenSelectorView } from '../swap-token-selector'\nimport { SwapNetworkSelectorView } from '../swap-network-selector'\nimport { SwapAmountInputView, type InputFieldRegistration } from '../swap-amount-input'\nimport { LoadingDots } from '../loading-dots'\nimport { TextBody } from '../texts'\nimport type { SwapCardLabels } from '../../types/swap-card-labels'\n\nexport interface SwapFromCardViewProps {\n labels: SwapCardLabels;\n selectedToken: { symbol: string; logoURI?: string } | null;\n onTokenClick: () => void;\n /** Opens the unified network + asset selector. Used by Simple variants. */\n onNetworkAndAssetClick?: () => void;\n balanceFormatted: string;\n balanceUsdFormatted: string;\n onBalanceClick?: () => void;\n chainLabel: string;\n chainImage?: string;\n onNetworkClick: () => void;\n amountValue: string;\n amountHasError: boolean;\n onAmountChange: (value: string) => void;\n maxFractionDigits?: number;\n amountUsdFormatted: string;\n isAmountUsdLoading: boolean;\n /** Optional inline error message consumed by simple variants. */\n errorMessage?: string;\n /** react-hook-form field registration (name, onBlur, ref) */\n field?: InputFieldRegistration;\n}\n\nexport const SwapFromCardView: React.FC<SwapFromCardViewProps> = ({\n labels,\n selectedToken,\n onTokenClick,\n balanceFormatted,\n balanceUsdFormatted,\n onBalanceClick,\n chainLabel,\n chainImage,\n onNetworkClick,\n amountValue,\n amountHasError,\n onAmountChange,\n maxFractionDigits,\n amountUsdFormatted,\n isAmountUsdLoading,\n field,\n}) => {\n return (\n <SectionCard className='flex flex-col gap-sm'>\n <div className='flex flex-row gap-md items-center'>\n <div className='flex flex-col gap-sm flex-1'>\n <SwapTokenSelectorView\n token={selectedToken}\n onClick={onTokenClick}\n testId='swap-from-token-selector'\n selectTokenLabel={labels.selectTokenLabel}\n />\n <TextBody\n variant='text-small'\n className='text-text-tertiary dark:text-text-tertiary-dark'\n >\n {onBalanceClick\n ? (\n <button\n type='button'\n onClick={onBalanceClick}\n className='cursor-pointer hover:text-text-secondary dark:hover:text-text-secondary-dark transition-colors'\n data-testid='swap-from-balance'\n >\n {labels.balanceLabel}: {balanceFormatted} ({balanceUsdFormatted})\n </button>\n )\n : (\n <span data-testid='swap-from-balance'>\n {labels.balanceLabel}: {balanceFormatted} ({balanceUsdFormatted})\n </span>\n )}\n </TextBody>\n <SwapNetworkSelectorView\n chainLabel={chainLabel}\n chainImage={chainImage}\n onClick={onNetworkClick}\n directionLabel={labels.directionLabel}\n testId='swap-from-network-selector'\n />\n </div>\n <div className='flex flex-col flex-1 items-end justify-center gap-xs'>\n <SwapAmountInputView\n value={amountValue}\n hasError={amountHasError}\n onChange={onAmountChange}\n maxFractionDigits={maxFractionDigits}\n ariaLabel={labels.amountPlaceholder}\n field={field}\n />\n <TextBody\n as='span'\n variant='text-small'\n className={\n amountHasError\n ? 'text-state-error dark:text-state-error'\n : 'text-text-tertiary dark:text-text-tertiary-dark'\n }\n >\n {isAmountUsdLoading ? <LoadingDots /> : amountUsdFormatted}\n </TextBody>\n </div>\n </div>\n </SectionCard>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\n\nexport interface SwapOutputAmountViewProps {\n displayOutput: string | number;\n isLoading: boolean;\n loadingElement?: React.ReactNode;\n searchingQuoteLabel?: string;\n className?: string;\n}\n\nexport const SwapOutputAmountView: React.FC<SwapOutputAmountViewProps> = ({\n displayOutput,\n isLoading,\n loadingElement,\n searchingQuoteLabel = 'Searching quote...',\n className,\n}) => {\n const baseClasses = '[font-size:var(--deframe-widget-font-size-xxl)] [line-height:var(--deframe-widget-font-leading-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] text-right w-full min-w-[120px] text-[color:var(--deframe-widget-color-text-primary)]'\n\n return (\n <div data-test-id='swap-flow-output-amount' className={twMerge(baseClasses, className)}>\n {isLoading\n ? (\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-primary-disabled)] inline-flex items-center'>\n {loadingElement ?? searchingQuoteLabel}\n </TextBody>\n )\n : (\n displayOutput\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { SwapTokenSelectorView } from '../swap-token-selector'\nimport { SwapNetworkSelectorView } from '../swap-network-selector'\nimport { SwapOutputAmountView } from '../swap-output-amount'\nimport { LoadingDots } from '../loading-dots'\nimport { TextBody } from '../texts'\nimport type { SwapCardLabels } from '../../types/swap-card-labels'\n\nexport interface SwapToCardViewProps {\n labels: SwapCardLabels;\n selectedToken: { symbol: string; logoURI?: string } | null;\n onTokenClick: () => void;\n /** Opens the unified network + asset selector. Used by Simple variants. */\n onNetworkAndAssetClick?: () => void;\n balanceFormatted: string;\n balanceUsdFormatted: string;\n chainLabel: string;\n chainImage?: string;\n onNetworkClick: () => void;\n outputAmount: string;\n isOutputLoading: boolean;\n outputUsdFormatted: string;\n isOutputUsdLoading: boolean;\n}\n\nexport const SwapToCardView: React.FC<SwapToCardViewProps> = ({\n labels,\n selectedToken,\n onTokenClick,\n balanceFormatted,\n balanceUsdFormatted,\n chainLabel,\n chainImage,\n onNetworkClick,\n outputAmount,\n isOutputLoading,\n outputUsdFormatted,\n isOutputUsdLoading,\n}) => {\n const loadingElement = labels.searchingQuoteLabel\n ? (\n <>\n {labels.searchingQuoteLabel}\n <LoadingDots />\n </>\n )\n : undefined\n\n return (\n <SectionCard className='flex flex-col gap-sm'>\n <div className='flex flex-row gap-md items-center'>\n <div className='flex flex-col gap-sm flex-1'>\n <SwapTokenSelectorView\n token={selectedToken}\n onClick={onTokenClick}\n testId='swap-to-token-selector'\n selectTokenLabel={labels.selectTokenLabel}\n />\n <TextBody\n variant='text-small'\n className='text-text-tertiary dark:text-text-tertiary-dark'\n >\n <span data-testid='swap-to-balance'>\n {labels.balanceLabel}: {balanceFormatted} ({balanceUsdFormatted})\n </span>\n </TextBody>\n <SwapNetworkSelectorView\n chainLabel={chainLabel}\n chainImage={chainImage}\n onClick={onNetworkClick}\n directionLabel={labels.directionLabel}\n testId='swap-to-network-selector'\n />\n </div>\n <div className='flex flex-col flex-1 items-end justify-center gap-xs'>\n <SwapOutputAmountView\n displayOutput={outputAmount}\n isLoading={isOutputLoading}\n loadingElement={loadingElement}\n searchingQuoteLabel={labels.searchingQuoteLabel}\n />\n <TextBody\n as='span'\n variant='text-small'\n className='text-text-tertiary dark:text-text-tertiary-dark'\n >\n {isOutputUsdLoading ? <LoadingDots /> : outputUsdFormatted}\n </TextBody>\n </div>\n </div>\n </SectionCard>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nconst SLIPPAGE_OPTIONS = [10, 50, 100] // basis points\n\nexport interface SwapSlippageToleranceButtonsViewProps {\n slippageBps: number;\n onSelect: (bps: number) => void;\n formatPercentage: (bps: number) => string;\n className?: string;\n}\n\nexport const SwapSlippageToleranceButtonsView: React.FC<SwapSlippageToleranceButtonsViewProps> = ({\n slippageBps,\n onSelect,\n formatPercentage,\n className,\n}) => {\n const baseClasses = 'flex gap-[var(--deframe-widget-size-gap-xs)]'\n\n return (\n <div data-test-id='swap-slippage-tolerance-buttons' className={twMerge(baseClasses, className)}>\n {SLIPPAGE_OPTIONS.map((option) => {\n const isActive = slippageBps === option\n const activeClasses = 'border-[color:var(--deframe-widget-color-brand-primary)] text-[color:var(--deframe-widget-color-brand-primary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_18%,transparent)]'\n const inactiveClasses = 'border-[color:var(--deframe-widget-color-border-tertiary)] text-[color:var(--deframe-widget-color-text-secondary)] bg-[var(--deframe-widget-color-bg-primary)]'\n const buttonBase = 'px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] rounded-[var(--deframe-widget-size-radius-xs)] border [font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] cursor-pointer'\n\n return (\n <button\n key={option}\n data-test-id={`slippage-option-${option}`}\n type='button'\n onClick={() => onSelect(option)}\n className={twMerge(buttonBase, isActive ? activeClasses : inactiveClasses)}\n aria-label={`${formatPercentage(option)}% slippage`}\n aria-pressed={isActive}\n >\n {formatPercentage(option)}\n </button>\n )\n })}\n </div>\n )\n}\n","import React from 'react'\nimport { CollapsibleSection } from '../collapsible-section'\nimport { SectionCard } from '../layout'\nimport { SwapSlippageToleranceButtonsView } from '../swap-slippage-tolerance-buttons'\nimport PercentageButton from '../buttons/percentage-button/PercentageButton'\n\nexport interface SwapAdvancedSettingsViewProps {\n title: string;\n isOpen: boolean;\n onOpenChange: (open: boolean) => void;\n slippageBps: number;\n onSlippageSelect: (bps: number) => void;\n formatPercentage: (bps: number) => string;\n percentageOptions: number[];\n onPercentageClick: (pct: number) => void;\n slippageFormatted: string;\n collapseText: string;\n expandText: string;\n maxLabel: string;\n}\n\nexport const SwapAdvancedSettingsView: React.FC<SwapAdvancedSettingsViewProps> = ({\n title,\n isOpen,\n onOpenChange,\n slippageBps,\n onSlippageSelect,\n formatPercentage,\n percentageOptions,\n onPercentageClick,\n slippageFormatted,\n collapseText,\n expandText,\n maxLabel,\n}) => {\n return (\n <div className='pb-2 mt-md'>\n <SectionCard>\n <CollapsibleSection\n title={title}\n subtitle={slippageFormatted}\n open={isOpen}\n onOpenChange={onOpenChange}\n collapseText={collapseText}\n expandText={expandText}\n >\n <SwapSlippageToleranceButtonsView\n slippageBps={slippageBps}\n onSelect={onSlippageSelect}\n formatPercentage={formatPercentage}\n className='mt-md'\n />\n <div className='w-full mt-md'>\n <div className='flex w-full gap-sm'>\n {percentageOptions.map((pct, index) => {\n const isMax = index === percentageOptions.length - 1\n const label = isMax ? maxLabel : `${pct / 100}%`\n return (\n <PercentageButton\n key={pct}\n type='button'\n onClick={() => onPercentageClick(pct)}\n >\n {label}\n </PercentageButton>\n )\n })}\n </div>\n </div>\n </CollapsibleSection>\n </SectionCard>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts'\n\nexport interface SwapQuoteHeaderViewProps {\n label: React.ReactNode;\n timerElement?: React.ReactNode;\n className?: string;\n}\n\nexport const SwapQuoteHeaderView: React.FC<SwapQuoteHeaderViewProps> = ({\n label,\n timerElement,\n className,\n}) => {\n const baseClasses = 'border-b border-[color:var(--deframe-widget-color-border-secondary)] pb-[var(--deframe-widget-size-padding-y-sm)]'\n\n return (\n <div data-test-id='swap-quote-header' className={twMerge(baseClasses, className)}>\n <div className='flex items-center justify-between'>\n <TextBody as='span' variant='text-small' className='[font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-secondary)] inline-flex items-center'>\n {label}\n </TextBody>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-md)]'>\n {timerElement}\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { CollapsibleInfoRow } from '../info-display/CollapsibleInfoRow'\nimport { InfoRowWithIcon } from '../info-display/InfoRowWithIcon'\nimport { InfoRowIconLabel } from '../info-display/InfoRowIconLabel'\nimport { InfoRowIconValue } from '../info-display/InfoRowIconValue'\n\nexport interface SwapQuoteBlockchainCostsViewProps {\n totalCostFormatted: string;\n feePercentage: string;\n gasCostFormatted: string;\n protocolFee: string;\n blockchainCostsLabel?: string;\n networkGasLabel?: string;\n protocolFeeLabel?: string;\n collapseLabel?: string;\n expandLabel?: string;\n}\n\nexport const SwapQuoteBlockchainCostsView: React.FC<SwapQuoteBlockchainCostsViewProps> = ({\n totalCostFormatted,\n feePercentage,\n gasCostFormatted,\n protocolFee,\n blockchainCostsLabel = 'Blockchain Costs',\n networkGasLabel = 'Network Gas',\n protocolFeeLabel = 'Protocol Fee',\n collapseLabel = 'Collapse',\n expandLabel = 'Expand',\n}) => {\n return (\n <div data-test-id='swap-quote-blockchain-costs'>\n <CollapsibleInfoRow\n label={blockchainCostsLabel}\n value={`${totalCostFormatted} ~ ${feePercentage}%`}\n defaultOpen\n collapseLabel={collapseLabel}\n expandLabel={expandLabel}\n >\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)]'>\n <InfoRowWithIcon>\n <InfoRowIconLabel>{networkGasLabel}</InfoRowIconLabel>\n <InfoRowIconValue>{gasCostFormatted}</InfoRowIconValue>\n </InfoRowWithIcon>\n <InfoRowWithIcon borderBottom>\n <InfoRowIconLabel>{protocolFeeLabel}</InfoRowIconLabel>\n <InfoRowIconValue>{protocolFee}</InfoRowIconValue>\n </InfoRowWithIcon>\n </div>\n </CollapsibleInfoRow>\n </div>\n )\n}\n","import React from 'react'\nimport { BannerNotification } from '../banner'\n\nexport interface SwapQuoteErrorsViewProps {\n hasQuoteError: boolean;\n hasBytecodeError: boolean;\n quoteErrorMessage?: string;\n bytecodeErrorMessage?: string;\n}\n\nexport const SwapQuoteErrorsView: React.FC<SwapQuoteErrorsViewProps> = ({\n hasQuoteError,\n hasBytecodeError,\n quoteErrorMessage = 'Unable to get quote for this transaction',\n bytecodeErrorMessage = 'Error building transaction',\n}) => {\n return (\n <div data-test-id='swap-quote-errors'>\n {hasQuoteError && (\n <div className='mt-sm'>\n <BannerNotification\n type='inline'\n variant='error'\n message={quoteErrorMessage}\n />\n </div>\n )}\n {hasBytecodeError && (\n <div className='mt-sm'>\n <BannerNotification\n type='inline'\n variant='error'\n message={bytecodeErrorMessage}\n />\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { SummaryDetails, type DetailItem } from '../details'\nimport { SwapQuoteHeaderView } from '../swap-quote-header'\nimport { SwapQuoteBlockchainCostsView } from '../swap-quote-blockchain-costs'\nimport { SwapQuoteErrorsView } from '../swap-quote-errors'\nimport { LoadingDots } from '../loading-dots'\nimport type { SwapQuoteDetailsLabels } from '../../types/swap-quote-details-labels'\n\nexport interface SwapQuoteDetailsViewProps {\n labels: SwapQuoteDetailsLabels;\n isVisible: boolean;\n isLoading: boolean;\n quoteHeaderLabel: React.ReactNode;\n timerElement?: React.ReactNode;\n exchangeRateFormatted: string;\n totalCostFormatted: string;\n feePercentage: string;\n gasCostFormatted: string;\n protocolFee: string;\n slippageFormatted: string;\n etaFormatted: string;\n quoteId: string;\n hasQuoteError: boolean;\n hasBytecodeError: boolean;\n quoteErrorMessage?: string;\n bytecodeErrorMessage?: string;\n}\n\nexport const SwapQuoteDetailsView: React.FC<SwapQuoteDetailsViewProps> = ({\n labels,\n isVisible,\n isLoading,\n quoteHeaderLabel,\n timerElement,\n exchangeRateFormatted,\n totalCostFormatted,\n feePercentage,\n gasCostFormatted,\n protocolFee,\n slippageFormatted,\n etaFormatted,\n quoteId,\n hasQuoteError,\n hasBytecodeError,\n quoteErrorMessage,\n bytecodeErrorMessage,\n}) => {\n const headerLabel = isLoading\n ? (\n <>\n {quoteHeaderLabel}\n <LoadingDots />\n </>\n )\n : (\n quoteHeaderLabel\n )\n\n const items: DetailItem[] = [\n {\n label: '',\n value: (\n <SwapQuoteHeaderView label={headerLabel} timerElement={timerElement} />\n ),\n valueClassName: 'w-full',\n },\n {\n label: labels.exchangeRateLabel,\n value: exchangeRateFormatted,\n },\n {\n label: '',\n value: (\n <SwapQuoteBlockchainCostsView\n totalCostFormatted={totalCostFormatted}\n feePercentage={feePercentage}\n gasCostFormatted={gasCostFormatted}\n protocolFee={protocolFee}\n blockchainCostsLabel={labels.blockchainCostsLabel}\n networkGasLabel={labels.networkGasLabel}\n protocolFeeLabel={labels.protocolFeeLabel}\n collapseLabel={labels.costsCollapseLabel}\n expandLabel={labels.costsExpandLabel}\n />\n ),\n valueClassName: 'flex flex-col gap-sm w-full text-right',\n },\n {\n label: labels.slippageLabel,\n value: slippageFormatted,\n },\n {\n label: labels.etaLabel,\n value: etaFormatted,\n },\n ]\n\n if (quoteId) {\n items.push({ label: labels.quoteIdLabel, value: quoteId })\n }\n\n return (\n <div className='w-full'>\n <SummaryDetails\n key={`details-${isVisible}`}\n title={labels.headerLabel}\n items={items}\n defaultOpen={isVisible}\n className='rounded shadow-sm p-md flex flex-col bg-[var(--deframe-widget-color-bg-subtle)] lg:bg-[var(--deframe-widget-color-bg-raised)]'\n />\n <SwapQuoteErrorsView\n hasQuoteError={hasQuoteError}\n hasBytecodeError={hasBytecodeError}\n quoteErrorMessage={quoteErrorMessage}\n bytecodeErrorMessage={bytecodeErrorMessage}\n />\n </div>\n )\n}\n","import React from 'react'\nimport PrimaryButton from '../buttons/primary-button/PrimaryButton'\nimport { LoadingDots } from '../loading-dots'\nimport type { ConfirmSwapButtonLabels } from '../../types/confirm-swap-button-labels'\n\nexport interface ConfirmSwapButtonViewProps {\n labels: ConfirmSwapButtonLabels;\n buttonLabel: string;\n disabled: boolean;\n isLoading: boolean;\n onClick: () => void;\n}\n\nexport const ConfirmSwapButtonView: React.FC<ConfirmSwapButtonViewProps> = ({\n buttonLabel,\n disabled,\n isLoading,\n onClick,\n}) => {\n return (\n <div data-testid='swap-confirm-button-wrapper'>\n <PrimaryButton\n onClick={onClick}\n className='w-full'\n disabled={disabled}\n >\n {buttonLabel}\n {isLoading && <LoadingDots />}\n </PrimaryButton>\n </div>\n )\n}\n","import React from 'react'\nimport { TextBody, TextHeading } from '../texts'\nimport { MdHistory, MdOutlineSwapVert } from 'react-icons/md'\nimport type { SwapFormLabels } from '../../types/swap-form-labels'\nimport { SwapFromCardView, type SwapFromCardViewProps } from '../swap-from-card-view/SwapFromCardView'\nimport { SwapToCardView, type SwapToCardViewProps } from '../swap-to-card-view/SwapToCardView'\nimport { SwapAdvancedSettingsView, type SwapAdvancedSettingsViewProps } from '../swap-advanced-settings-view/SwapAdvancedSettingsView'\nimport { SwapQuoteDetailsView, type SwapQuoteDetailsViewProps } from '../swap-quote-details-view/SwapQuoteDetailsView'\nimport { ConfirmSwapButtonView, type ConfirmSwapButtonViewProps } from '../confirm-swap-button-view/ConfirmSwapButtonView'\n\nexport interface SwapFormViewProps {\n // Form\n onSubmit: React.FormEventHandler<HTMLFormElement>;\n formRef?: React.Ref<HTMLFormElement>;\n\n // Layout\n labels: SwapFormLabels;\n onHistoryClick: () => void;\n onSwitchTokens: () => void;\n switchTokensAriaLabel: string;\n\n // Typed child view props (pattern EarnDesktopView)\n fromCard: SwapFromCardViewProps;\n toCard: SwapToCardViewProps;\n advancedSettings: SwapAdvancedSettingsViewProps;\n transactionDetails: SwapQuoteDetailsViewProps;\n confirmButton: ConfirmSwapButtonViewProps;\n}\n\nexport const SwapFormView: React.FC<SwapFormViewProps> = ({\n onSubmit,\n formRef,\n labels,\n onHistoryClick,\n onSwitchTokens,\n switchTokensAriaLabel,\n fromCard,\n toCard,\n advancedSettings,\n transactionDetails,\n confirmButton,\n}) => {\n return (\n <>\n <div\n data-testid='swap-form-view'\n className='flex-1 min-h-0 overflow-y-auto swap-flow-content pr-sm'\n >\n <form ref={formRef} onSubmit={onSubmit} data-testid='swap-flow-form'>\n <div className='flex flex-col gap-md text-text-secondary dark:text-text-secondary-dark'>\n <div className='flex items-start justify-between gap-md'>\n <div className='flex flex-col gap-sm'>\n <TextHeading variant='h5' className='!text-[21px]'>\n <span data-testid='swap-flow-title'>{labels.title}</span>\n </TextHeading>\n {labels.subtitle && (\n <TextBody variant='text-small' className='!text-[14px]'>\n {labels.subtitle}\n </TextBody>\n )}\n </div>\n <button\n data-testid='swap-history-button'\n type='button'\n onClick={onHistoryClick}\n className='flex items-center justify-center w-12 h-12 transition-colors rounded-full cursor-pointer text-text-secondary dark:text-text-secondary-dark hover:text-brand-primary'\n aria-label={labels.historyAriaLabel}\n >\n <MdHistory className='w-6 h-6' />\n </button>\n </div>\n <div className='relative flex flex-col items-stretch gap-sm'>\n <SwapFromCardView {...fromCard} />\n <div className='flex justify-center -my-5 relative z-10'>\n <button\n data-testid='swap-switch-tokens-button'\n type='button'\n onClick={onSwitchTokens}\n className='w-10 h-10 rounded-full bg-brand-secondary shadow-md flex items-center justify-center text-text-primary hover:shadow-lg transition-shadow focus:outline-none focus:ring-2 focus:ring-brand-secondary cursor-pointer'\n aria-label={switchTokensAriaLabel}\n >\n <MdOutlineSwapVert className='w-5 h-5' />\n </button>\n </div>\n <SwapToCardView {...toCard} />\n </div>\n <SwapAdvancedSettingsView {...advancedSettings} />\n <div className='pb-xl'>\n <SwapQuoteDetailsView {...transactionDetails} />\n </div>\n </div>\n </form>\n </div>\n <div\n data-testid='swap-flow-footer'\n className='border-t p-md border-border-default dark:border-border-default-dark bg-bg-primary dark:bg-bg-primary-dark'\n >\n <ConfirmSwapButtonView {...confirmButton} />\n </div>\n </>\n )\n}\n","import React, { useCallback, useRef, useState } from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport type { SwapFromCardViewProps } from './SwapFromCardView'\nimport { LoadingDots } from '../loading-dots'\n\n// ── Props ────────────────────────────────────────────────────────────────────\n\nexport interface SwapFromCardViewSimpleProps extends SwapFromCardViewProps {\n /** Percentage chip values, e.g. [25, 50, 75, 100] */\n percentageOptions?: number[]\n /** Called when a chip is clicked */\n onPercentageClick?: (pct: number) => void\n /** Currently active chip (null = none) */\n selectedPercentage?: number | null\n /** Label for the last (100 %) chip. Default: 'Max.' */\n maxLabel?: string\n /** Custom label for the error action button */\n errorActionLabel?: string\n /** Called when the error action button is clicked */\n onErrorAction?: () => void\n}\n\n// ── Component ────────────────────────────────────────────────────────────────\n\nexport const SwapFromCardViewSimple: React.FC<SwapFromCardViewSimpleProps> = ({\n labels,\n selectedToken,\n onTokenClick,\n onNetworkAndAssetClick,\n balanceFormatted,\n onBalanceClick,\n chainLabel,\n chainImage,\n amountValue,\n amountHasError,\n onAmountChange,\n amountUsdFormatted,\n isAmountUsdLoading,\n field,\n percentageOptions,\n onPercentageClick,\n selectedPercentage = null,\n maxLabel = 'Max.',\n errorMessage = 'Saldo insuficiente para realizar a troca.',\n errorActionLabel = 'Adicionar via PIX',\n onErrorAction,\n}) => {\n // ── Hover state for percentage chips with 150 ms hide delay ──────────────\n const [isHovered, setIsHovered] = useState(false)\n const hideTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n const handleMouseEnter = useCallback(() => {\n if (hideTimeout.current) {\n clearTimeout(hideTimeout.current)\n hideTimeout.current = null\n }\n setIsHovered(true)\n }, [])\n\n const handleMouseLeave = useCallback(() => {\n hideTimeout.current = setTimeout(() => setIsHovered(false), 150)\n }, [])\n\n // ── Styling ──────────────────────────────────────────────────────────────\n const wrapperClasses = twMerge(\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n 'transition-[border-color,background] duration-200',\n amountHasError\n ? 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)]'\n : 'border-[color:var(--deframe-widget-color-border-secondary)] bg-[var(--deframe-widget-color-bg-secondary)]'\n )\n\n const isEmpty = !amountValue || Number(amountValue) === 0\n\n const showChips = isHovered && percentageOptions && percentageOptions.length > 0 && onPercentageClick\n\n return (\n <div\n data-test-id='swap-from-card-simple'\n className={wrapperClasses}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {/* ── Top row: token selector | divider | amount input ── */}\n <div\n data-test-id='swap-from-card-simple-top-row'\n className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'\n >\n {/* Token selector area */}\n <TokenSelectorArea\n selectedToken={selectedToken}\n chainLabel={chainLabel}\n chainImage={chainImage}\n onTokenClick={onNetworkAndAssetClick ?? onTokenClick}\n selectTokenLabel={labels.selectTokenLabel}\n />\n\n {/* Vertical divider */}\n <div\n data-test-id='swap-from-card-simple-divider'\n className='w-px h-10 bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0'\n />\n\n {/* Amount input area */}\n <div\n data-test-id='swap-from-card-simple-amount-wrapper'\n className='flex flex-col items-end flex-1 min-w-0'\n >\n <input\n data-test-id='swap-from-card-simple-amount-input'\n type='text'\n inputMode='decimal'\n autoComplete='off'\n placeholder='0'\n aria-label={labels.amountPlaceholder}\n value={amountValue || ''}\n className={twMerge(\n 'bg-transparent border-none outline-none',\n 'text-right',\n 'text-[36px] [font-weight:var(--deframe-widget-font-weight-semibold)] [line-height:1.1]',\n 'w-full px-[var(--deframe-widget-size-padding-x-none)] py-[var(--deframe-widget-size-padding-y-none)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'placeholder:text-[color:var(--deframe-widget-color-text-tertiary)]',\n isEmpty\n ? 'text-[color:var(--deframe-widget-color-text-tertiary)]'\n : 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n {...(field\n ? { name: field.name, onBlur: field.onBlur, ref: field.ref }\n : {})}\n onChange={(e) => onAmountChange(e.target.value)}\n onWheel={(e: React.WheelEvent<HTMLInputElement>) => {\n e.currentTarget.blur()\n }}\n />\n <span\n data-test-id='swap-from-card-simple-usd-conversion'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n {isAmountUsdLoading ? <LoadingDots /> : amountUsdFormatted}\n </span>\n </div>\n </div>\n\n {/* ── Balance row — hidden when no token selected ── */}\n {selectedToken && (\n <div\n data-test-id='swap-from-card-simple-balance-row'\n className='flex items-center justify-between mt-[var(--deframe-widget-size-gap-sm)]'\n >\n {onBalanceClick\n ? (\n <button\n data-test-id='swap-from-card-simple-balance'\n type='button'\n onClick={onBalanceClick}\n aria-label={`${labels.balanceLabel}: ${balanceFormatted}`}\n className={twMerge(\n 'text-[13px] font-[var(--deframe-widget-font-family)] cursor-pointer',\n 'bg-transparent border-none outline-none p-0',\n 'text-[color:var(--deframe-widget-color-text-tertiary)]',\n 'hover:text-[color:var(--deframe-widget-color-text-secondary)]',\n 'transition-colors duration-150'\n )}\n >\n {labels.balanceLabel}:{' '}\n <span\n data-test-id='swap-from-card-simple-balance-value'\n className={\n amountHasError\n ? 'text-[color:var(--deframe-widget-color-state-error)]'\n : 'text-[color:var(--deframe-widget-color-text-secondary)]'\n }\n >\n {balanceFormatted}\n </span>\n </button>\n )\n : (\n <span\n data-test-id='swap-from-card-simple-balance'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n {labels.balanceLabel}:{' '}\n <span\n data-test-id='swap-from-card-simple-balance-value'\n className={\n amountHasError\n ? 'text-[color:var(--deframe-widget-color-state-error)]'\n : 'text-[color:var(--deframe-widget-color-text-secondary)]'\n }\n >\n {balanceFormatted}\n </span>\n </span>\n )}\n </div>\n )}\n\n {/* ── Percentage chips (hover-reveal with AnimatePresence) ── */}\n <AnimatePresence>\n {showChips && (\n <motion.div\n data-test-id='swap-from-card-simple-chips'\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: 'auto' }}\n exit={{ opacity: 0, height: 0 }}\n transition={{ duration: 0.15 }}\n className='overflow-hidden mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <div\n data-test-id='swap-from-card-simple-chips-row'\n className='flex gap-[6px] items-center'\n >\n {percentageOptions!.map((pct, i) => {\n const isLast = i === percentageOptions!.length - 1\n const isActive = pct === selectedPercentage\n const chipLabel = isLast ? maxLabel : `${pct / 100}%`\n\n return (\n <ChipPill\n key={pct}\n label={chipLabel}\n active={isActive}\n onClick={() => onPercentageClick!(pct)}\n />\n )\n })}\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n\n {/* ── Inline error notification ── */}\n {amountHasError && (\n <div\n data-test-id='swap-from-card-simple-error'\n className='mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <InlineNotificationBar\n message={errorMessage}\n actionLabel={errorActionLabel}\n onAction={onErrorAction}\n />\n </div>\n )}\n </div>\n )\n}\n\n// ── TokenSelectorArea (internal) ─────────────────────────────────────────────\n\ninterface TokenSelectorAreaProps {\n selectedToken: SwapFromCardViewSimpleProps['selectedToken']\n chainLabel: string\n chainImage?: string\n onTokenClick: () => void\n selectTokenLabel: string\n}\n\nfunction TokenSelectorArea ({\n selectedToken,\n chainLabel,\n chainImage,\n onTokenClick,\n selectTokenLabel,\n}: TokenSelectorAreaProps) {\n return (\n <button\n data-test-id='swap-from-card-simple-token-selector'\n type='button'\n onClick={onTokenClick}\n aria-label={\n selectedToken\n ? `Select token — currently ${selectedToken.symbol} on ${chainLabel}`\n : selectTokenLabel\n }\n className={twMerge(\n 'inline-flex items-center gap-[10px]',\n 'h-[54px] px-[10px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'border-none outline-none',\n 'transition-[background] duration-150',\n 'flex-shrink-0',\n 'cursor-pointer hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_72%,transparent)]'\n )}\n >\n {selectedToken\n ? (\n <>\n {/* Token icon with network badge */}\n <TokenIconWithBadge\n token={selectedToken}\n chainLabel={chainLabel}\n chainImage={chainImage}\n />\n\n {/* Token info: symbol + network */}\n <div\n data-test-id='swap-from-card-simple-token-info'\n className='flex flex-col items-start min-w-0'\n >\n <span\n data-test-id='swap-from-card-simple-token-symbol'\n className={twMerge(\n 'text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] leading-[1.2]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n >\n {selectedToken.symbol}\n </span>\n <span\n data-test-id='swap-from-card-simple-token-network'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-tertiary)] uppercase tracking-[0.04em] font-[var(--deframe-widget-font-family)] leading-[1.2]'\n >\n {chainLabel}\n </span>\n </div>\n\n {/* Chevron */}\n <ChevronDown />\n </>\n )\n : (\n <>\n <span\n data-test-id='swap-from-card-simple-token-placeholder-label'\n className={twMerge(\n 'text-[11px] [font-weight:var(--deframe-widget-font-weight-regular)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'whitespace-nowrap uppercase'\n )}\n >\n {selectTokenLabel}\n </span>\n <ChevronDown />\n </>\n )}\n </button>\n )\n}\n\n// ── TokenIconWithBadge (internal) ────────────────────────────────────────────\n\ninterface TokenIconWithBadgeProps {\n token: { symbol: string; logoURI?: string }\n chainLabel: string\n chainImage?: string\n}\n\nfunction TokenIconWithBadge ({ token, chainLabel, chainImage }: TokenIconWithBadgeProps) {\n const [imgError, setImgError] = useState(false)\n const [badgeError, setBadgeError] = useState(false)\n const size = 38\n const badgeSize = 16\n\n return (\n <div\n data-test-id='swap-from-card-simple-token-icon'\n className='relative flex-shrink-0'\n style={{ width: size, height: size }}\n >\n {/* Main token icon */}\n {token.logoURI && !imgError\n ? (\n <img\n data-test-id='swap-from-card-simple-token-icon-img'\n src={token.logoURI}\n alt={token.symbol}\n width={size}\n height={size}\n className='rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 object-cover'\n onError={() => setImgError(true)}\n />\n )\n : (\n <div\n data-test-id='swap-from-card-simple-token-icon-fallback'\n className={twMerge(\n 'rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0',\n 'flex items-center justify-center',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n 'text-[color:var(--deframe-widget-color-text-primary-dark)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]'\n )}\n style={{ width: size, height: size, fontSize: size * 0.33 }}\n >\n {token.symbol.slice(0, 2).toUpperCase()}\n </div>\n )}\n\n {/* Network badge */}\n {chainImage && !badgeError\n ? (\n <div\n data-test-id='swap-from-card-simple-token-badge'\n className='absolute -bottom-0.5 -right-0.5 rounded-[var(--deframe-widget-size-radius-full)] shadow-[0_0_0_2px_var(--deframe-widget-color-bg-secondary)]'\n >\n <img\n data-test-id='swap-from-card-simple-token-badge-img'\n src={chainImage}\n alt={chainLabel}\n width={badgeSize}\n height={badgeSize}\n className='rounded-[var(--deframe-widget-size-radius-full)] object-cover'\n onError={() => setBadgeError(true)}\n />\n </div>\n )\n : chainLabel\n ? (\n <div\n data-test-id='swap-from-card-simple-token-badge'\n className={twMerge(\n 'absolute -bottom-0.5 -right-0.5',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n 'shadow-[0_0_0_2px_var(--deframe-widget-color-bg-secondary)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'flex items-center justify-center',\n '[font-weight:var(--deframe-widget-font-weight-bold)]',\n 'text-[color:var(--deframe-widget-color-text-primary-dark)]'\n )}\n style={{ width: badgeSize, height: badgeSize, fontSize: badgeSize * 0.45 }}\n >\n {chainLabel.slice(0, 1).toUpperCase()}\n </div>\n )\n : null}\n </div>\n )\n}\n\n// ── ChevronDown (internal) ───────────────────────────────────────────────────\n\nfunction ChevronDown () {\n return (\n <svg\n data-test-id='swap-from-card-simple-chevron'\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n className='flex-shrink-0 text-[color:var(--deframe-widget-color-text-secondary)]'\n aria-hidden='true'\n >\n <polyline points='6 9 12 15 18 9' />\n </svg>\n )\n}\n\n// ── ChipPill (internal) ──────────────────────────────────────────────────────\n\ninterface ChipPillProps {\n label: string\n active: boolean\n onClick: () => void\n}\n\nfunction ChipPill ({ label, active, onClick }: ChipPillProps) {\n const baseClasses = twMerge(\n 'inline-flex items-center justify-center',\n 'py-[3px] px-[10px]',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n 'cursor-pointer',\n 'text-[12px]',\n 'transition-all duration-150',\n 'outline-none',\n 'font-[var(--deframe-widget-font-family)]',\n 'whitespace-nowrap',\n 'border'\n )\n\n const stateClasses = active\n ? twMerge(\n 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)]',\n 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]',\n 'text-[color:var(--deframe-widget-color-brand-primary)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]'\n )\n : twMerge(\n 'border-[color:var(--deframe-widget-color-border-secondary)]',\n 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n 'hover:border-[color:var(--deframe-widget-color-border-primary)]',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]',\n 'hover:text-[color:var(--deframe-widget-color-text-primary)]'\n )\n\n return (\n <button\n data-test-id='swap-from-card-simple-chip'\n type='button'\n onClick={onClick}\n aria-label={label}\n className={twMerge(baseClasses, stateClasses)}\n >\n <span data-test-id='swap-from-card-simple-chip-label'>\n {label}\n </span>\n </button>\n )\n}\n\n// ── InlineNotificationBar (internal) ─────────────────────────────────────────\n\ninterface InlineNotificationBarProps {\n message: string\n actionLabel: string\n onAction?: () => void\n}\n\nfunction InlineNotificationBar ({ message, actionLabel, onAction }: InlineNotificationBarProps) {\n const wrapperClasses = twMerge(\n 'relative flex items-center gap-[var(--deframe-widget-size-gap-sm)]',\n 'py-[7px] pr-[10px] pl-[14px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border',\n 'overflow-hidden',\n 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)]',\n 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)]'\n )\n\n return (\n <div\n data-test-id='swap-from-card-simple-notification'\n role='alert'\n className={wrapperClasses}\n >\n {/* Left accent bar */}\n <div\n data-test-id='swap-from-card-simple-notification-accent'\n className={twMerge(\n 'absolute left-0 top-0 bottom-0 w-[3px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)_0_0_var(--deframe-widget-size-radius-sm)]',\n 'bg-[var(--deframe-widget-color-state-error)]'\n )}\n />\n\n {/* Dot indicator */}\n <div\n data-test-id='swap-from-card-simple-notification-dot'\n className='w-[6px] h-[6px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 bg-[var(--deframe-widget-color-state-error)]'\n />\n\n {/* Message */}\n <span\n data-test-id='swap-from-card-simple-notification-message'\n className='flex-1 text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] font-[var(--deframe-widget-font-family)] leading-[1.4]'\n >\n {message}\n </span>\n\n {/* Action button */}\n {onAction && (\n <button\n data-test-id='swap-from-card-simple-notification-action'\n type='button'\n onClick={onAction}\n aria-label={actionLabel}\n className={twMerge(\n 'flex-shrink-0 bg-none border-none cursor-pointer',\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'py-[var(--deframe-widget-size-padding-y-none)] px-[var(--deframe-widget-size-padding-x-xs)]',\n 'outline-none font-[var(--deframe-widget-font-family)] whitespace-nowrap',\n 'text-[color:var(--deframe-widget-color-state-error)]'\n )}\n >\n {actionLabel} &rarr;\n </button>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { LoadingDots } from '../loading-dots'\nimport type { SwapToCardViewProps } from './SwapToCardView'\n\nexport type { SwapToCardViewProps }\n\n// ── Inline IconCircle ────────────────────────────────────────────────────────\n\ninterface IconCircleItem {\n name: string\n color: string\n iconUrl?: string\n}\n\nfunction IconCircle ({ item, size = 36 }: { item: IconCircleItem; size?: number }) {\n const [imgError, setImgError] = React.useState(false)\n\n if (item.iconUrl && !imgError) {\n return (\n <img\n data-test-id='icon-circle-img'\n src={item.iconUrl}\n alt={item.name}\n width={size}\n height={size}\n className='rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 object-cover'\n onError={() => setImgError(true)}\n />\n )\n }\n\n return (\n <div\n data-test-id='icon-circle-fallback'\n className='rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 flex items-center justify-center [font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary-dark)]'\n style={{\n width: size,\n height: size,\n background: item.color,\n fontSize: size * 0.33,\n letterSpacing: '-0.01em',\n }}\n >\n {item.name.slice(0, 2).toUpperCase()}\n </div>\n )\n}\n\n// ── Inline TokenIcon with badge ──────────────────────────────────────────────\n\ninterface TokenIconBadge {\n name: string\n color: string\n iconUrl?: string\n}\n\nfunction TokenIcon ({\n token,\n size = 38,\n badge,\n badgeSize = 16,\n}: {\n token: { name: string; color: string; iconUrl?: string }\n size?: number\n badge?: TokenIconBadge\n badgeSize?: number\n}) {\n return (\n <div\n data-test-id='swap-to-simple-token-icon'\n className='relative flex-shrink-0'\n style={{ width: size, height: size }}\n >\n <IconCircle item={token} size={size} />\n {badge && (\n <div\n data-test-id='swap-to-simple-token-badge'\n className='absolute -bottom-0.5 -right-0.5 rounded-[var(--deframe-widget-size-radius-full)] shadow-[0_0_0_2px_var(--deframe-widget-color-bg-secondary)]'\n >\n <IconCircle item={badge} size={badgeSize} />\n </div>\n )}\n </div>\n )\n}\n\n// ── SwapToCardViewSimple ─────────────────────────────────────────────────────\n\nexport const SwapToCardViewSimple: React.FC<SwapToCardViewProps> = ({\n labels,\n selectedToken,\n onTokenClick,\n onNetworkAndAssetClick,\n balanceFormatted,\n balanceUsdFormatted,\n chainLabel,\n chainImage,\n outputAmount,\n isOutputLoading,\n outputUsdFormatted,\n isOutputUsdLoading,\n}) => {\n const handleTokenClick = onNetworkAndAssetClick ?? onTokenClick\n const isEmpty = !outputAmount || Number(outputAmount) === 0\n\n const wrapperClasses = twMerge(\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border',\n 'border-[color:var(--deframe-widget-color-border-secondary)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'px-[var(--deframe-widget-size-padding-x-md)]',\n 'py-[var(--deframe-widget-size-padding-y-md)]',\n 'font-[var(--deframe-widget-font-family)]'\n )\n\n const selectorBaseClasses = twMerge(\n 'inline-flex items-center gap-[10px]',\n 'h-[54px] px-[10px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'border-none',\n 'outline-none',\n 'transition-[background] duration-150',\n 'flex-shrink-0',\n 'cursor-pointer hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_72%,transparent)]'\n )\n\n return (\n <div data-test-id='swap-to-card-view-simple' className={wrapperClasses}>\n {/* Top row: token selector + divider + output amount */}\n <div\n data-test-id='swap-to-simple-top-row'\n className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'\n >\n {/* Token selector area */}\n {selectedToken\n ? (\n <button\n type='button'\n data-test-id='swap-to-simple-token-selector'\n onClick={handleTokenClick}\n aria-label={`Select token — currently ${selectedToken.symbol} on ${chainLabel}`}\n className={selectorBaseClasses}\n >\n <TokenIcon\n token={{\n name: selectedToken.symbol,\n color: 'var(--deframe-widget-color-brand-secondary)',\n iconUrl: selectedToken.logoURI,\n }}\n size={38}\n badge={\n chainLabel\n ? {\n name: chainLabel,\n color: 'var(--deframe-widget-color-brand-secondary)',\n iconUrl: chainImage,\n }\n : undefined\n }\n badgeSize={16}\n />\n <div\n data-test-id='swap-to-simple-token-info'\n className='flex flex-col items-start min-w-0'\n >\n <span\n data-test-id='swap-to-simple-token-symbol'\n className='text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] leading-[1.2] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'\n >\n {selectedToken.symbol}\n </span>\n <span\n data-test-id='swap-to-simple-token-network'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-tertiary)] uppercase tracking-[0.04em] font-[var(--deframe-widget-font-family)] leading-[1.2]'\n >\n {chainLabel}\n </span>\n </div>\n <svg\n data-test-id='swap-to-simple-chevron'\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n className='flex-shrink-0 text-[color:var(--deframe-widget-color-text-secondary)]'\n aria-hidden='true'\n >\n <polyline points='6 9 12 15 18 9' />\n </svg>\n </button>\n )\n : (\n <button\n type='button'\n data-test-id='swap-to-simple-token-placeholder'\n onClick={handleTokenClick}\n aria-label={labels.selectTokenLabel}\n className={selectorBaseClasses}\n >\n <span\n data-test-id='swap-to-simple-placeholder-label'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-regular)] leading-[1.2] font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-secondary)] whitespace-nowrap uppercase'\n >\n {labels.selectTokenLabel}\n </span>\n <svg\n data-test-id='swap-to-simple-placeholder-chevron'\n width='14'\n height='14'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n className='flex-shrink-0 text-[color:var(--deframe-widget-color-text-secondary)]'\n aria-hidden='true'\n >\n <polyline points='6 9 12 15 18 9' />\n </svg>\n </button>\n )}\n\n {/* Vertical divider */}\n <div\n data-test-id='swap-to-simple-divider'\n className='w-px h-10 bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0'\n />\n\n {/* Output amount area (right-aligned, read-only) */}\n <div\n data-test-id='swap-to-simple-output-wrapper'\n className='flex flex-col items-end flex-1 min-w-0'\n >\n {isOutputLoading\n ? (\n <span\n data-test-id='swap-to-simple-output-loading'\n className={twMerge(\n 'text-[36px] [font-weight:var(--deframe-widget-font-weight-semibold)] [line-height:1.1]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-tertiary)]',\n 'text-right',\n 'flex items-center'\n )}\n >\n <LoadingDots />\n </span>\n )\n : (\n <span\n data-test-id='swap-to-simple-output-amount'\n className={twMerge(\n 'text-[36px] [font-weight:var(--deframe-widget-font-weight-semibold)] [line-height:1.1]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-right w-full',\n isEmpty\n ? 'text-[color:var(--deframe-widget-color-text-tertiary)]'\n : 'text-[color:var(--deframe-widget-color-text-primary)]'\n )}\n >\n {isEmpty ? '0' : outputAmount}\n </span>\n )}\n <span\n data-test-id='swap-to-simple-output-usd'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n {isOutputUsdLoading ? <LoadingDots /> : outputUsdFormatted}\n </span>\n </div>\n </div>\n\n {/* Balance row — hidden when no token selected */}\n {selectedToken && (\n <div\n data-test-id='swap-to-simple-balance-row'\n className='flex items-center justify-between mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <span\n data-test-id='swap-to-simple-balance'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n {labels.balanceLabel}:{' '}\n <span\n data-test-id='swap-to-simple-balance-value'\n className='text-[color:var(--deframe-widget-color-text-secondary)]'\n >\n {balanceFormatted}\n </span>\n </span>\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport type { ConfirmSwapButtonViewProps } from './ConfirmSwapButtonView'\n\nexport type { ConfirmSwapButtonViewProps }\n\n// ── Inline Spinner ───────────────────────────────────────────────────────────\n\nfunction Spinner () {\n return (\n <svg\n data-test-id='confirm-swap-button-simple-spinner'\n width='18'\n height='18'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n className='animate-spin'\n aria-hidden='true'\n >\n <circle cx='12' cy='12' r='10' opacity='0.3' />\n <path d='M12 2 A10 10 0 0 1 22 12' />\n </svg>\n )\n}\n\n// ── ConfirmSwapButtonViewSimple ──────────────────────────────────────────────\n\nexport const ConfirmSwapButtonViewSimple: React.FC<ConfirmSwapButtonViewProps> = ({\n buttonLabel,\n disabled,\n isLoading,\n onClick,\n}) => {\n const isDisabled = disabled || isLoading\n\n const buttonClasses = twMerge(\n 'w-full h-12',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border-none',\n 'text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'transition-[background,color] duration-200',\n 'flex items-center justify-center gap-[var(--deframe-widget-size-gap-sm)]',\n isDisabled\n ? 'bg-[var(--deframe-widget-color-brand-primary-disabled)] text-[color:var(--deframe-widget-color-text-primary-disabled)] cursor-not-allowed'\n : 'bg-[var(--deframe-widget-color-brand-primary)] text-[color:var(--deframe-widget-color-text-primary-dark)] cursor-pointer'\n )\n\n return (\n <div data-test-id='confirm-swap-button-simple-wrapper'>\n <button\n data-test-id='confirm-swap-button-simple'\n onClick={!isDisabled ? onClick : undefined}\n disabled={isDisabled}\n aria-label={buttonLabel}\n className={buttonClasses}\n >\n {isLoading ? <Spinner /> : buttonLabel}\n </button>\n </div>\n )\n}\n","import React, { useCallback, useEffect, useRef, useState } from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { motion } from 'framer-motion'\nimport type { SwapFormViewProps } from './SwapFormView'\nimport { SwapFromCardViewSimple } from '../swap-from-card-view/SwapFromCardViewSimple'\nimport { SwapToCardViewSimple } from '../swap-to-card-view/SwapToCardViewSimple'\nimport { ConfirmSwapButtonViewSimple } from '../confirm-swap-button-view/ConfirmSwapButtonViewSimple'\nimport { SWAP_SIMPLE_MIN_HEIGHT, SWAP_SIMPLE_WIDTH } from './constants'\n\nexport type { SwapFormViewProps }\n\n// ── SwapFormViewSimple ──────────────────────────────────────────────────────\n\nexport const SwapFormViewSimple: React.FC<SwapFormViewProps> = ({\n onSubmit,\n formRef,\n labels,\n onHistoryClick,\n onSwitchTokens,\n switchTokensAriaLabel,\n fromCard,\n toCard,\n advancedSettings,\n transactionDetails,\n confirmButton,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null)\n const [panelPos, setPanelPos] = useState<{ top: number; left: number } | null>(null)\n const [showPanel, setShowPanel] = useState(false)\n\n // Sync: if the parent closes the panel externally, reset the local gate\n useEffect(() => {\n if (!advancedSettings.isOpen) setShowPanel(false)\n }, [advancedSettings.isOpen])\n\n const updatePanelPos = useCallback(() => {\n if (containerRef.current && showPanel) {\n const rect = containerRef.current.getBoundingClientRect()\n setPanelPos({ top: rect.top, left: rect.right + 16 })\n }\n }, [showPanel])\n\n useEffect(() => {\n if (!showPanel) {\n setPanelPos(null)\n return\n }\n updatePanelPos()\n window.addEventListener('scroll', updatePanelPos, true)\n window.addEventListener('resize', updatePanelPos)\n return () => {\n window.removeEventListener('scroll', updatePanelPos, true)\n window.removeEventListener('resize', updatePanelPos)\n }\n }, [showPanel, updatePanelPos])\n\n return (\n <div\n ref={containerRef}\n data-test-id='swap-form-view-simple'\n className={twMerge(\n 'relative',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n 'flex flex-col',\n `w-[${SWAP_SIMPLE_WIDTH}px] max-w-[calc(100%-32px)] shrink-0 box-border`,\n 'font-[var(--deframe-widget-font-family)]'\n )}\n style={{ minHeight: SWAP_SIMPLE_MIN_HEIGHT }}\n >\n <form ref={formRef} onSubmit={onSubmit} data-test-id='swap-form-simple-form' className='flex flex-col flex-1'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)]'>\n {/* ── Top row: history button only (no title/subtitle) ── */}\n <div\n data-test-id='swap-form-simple-top-row'\n className='flex items-center justify-end mb-[var(--deframe-widget-size-gap-sm)]'\n >\n <HistoryButton onClick={onHistoryClick} ariaLabel={labels.historyAriaLabel} />\n </div>\n\n {/* ── From card ── */}\n <SwapFromCardViewSimple\n {...fromCard}\n onNetworkAndAssetClick={fromCard.onNetworkAndAssetClick\n ? () => {\n setShowPanel(false)\n fromCard.onNetworkAndAssetClick!()\n }\n : undefined}\n percentageOptions={advancedSettings.percentageOptions}\n onPercentageClick={(pct) => advancedSettings.onPercentageClick(pct)}\n maxLabel={advancedSettings.maxLabel}\n />\n\n {/* ── Swap direction button (overlaps both cards) ── */}\n <div\n data-test-id='swap-form-simple-direction-row'\n className='flex justify-center relative -my-[16px] z-[1]'\n >\n <SwapDirectionButton\n onClick={onSwitchTokens}\n ariaLabel={switchTokensAriaLabel}\n />\n </div>\n\n {/* ── To card ── */}\n <SwapToCardViewSimple\n {...toCard}\n onNetworkAndAssetClick={toCard.onNetworkAndAssetClick\n ? () => {\n setShowPanel(false)\n toCard.onNetworkAndAssetClick!()\n }\n : undefined}\n />\n\n {/* ── Advanced pill ── */}\n <div\n data-test-id='swap-form-simple-advanced-wrapper'\n className='flex justify-end mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <AdvancedPill\n label='Avançado'\n isOpen={showPanel}\n onClick={() => {\n const next = !showPanel\n setShowPanel(next)\n advancedSettings.onOpenChange(next)\n }}\n />\n </div>\n\n </div>\n\n {/* ── Spacer pushes button to bottom ── */}\n <div className='flex-1' />\n\n {/* ── Submit button ── */}\n <div className='mt-[var(--deframe-widget-size-gap-sm)]'>\n <ConfirmSwapButtonViewSimple {...confirmButton} />\n </div>\n </form>\n\n {/* ── Advanced panel — fixed, top-right of container ── */}\n {showPanel && panelPos && (\n <div\n data-test-id='swap-form-simple-advanced-panel'\n className={twMerge(\n 'fixed',\n 'w-[320px] z-[9999]',\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'shadow-[0px_4px_24px_0px_#0000003D]',\n 'font-[var(--deframe-widget-font-family)]'\n )}\n style={{ top: panelPos.top, left: panelPos.left }}\n >\n <AdvancedPanelContent\n advancedSettings={{\n ...advancedSettings,\n onOpenChange: (open: boolean) => {\n setShowPanel(open)\n advancedSettings.onOpenChange(open)\n },\n }}\n transactionDetails={transactionDetails}\n />\n </div>\n )}\n </div>\n )\n}\n\n// ── HistoryButton ───────────────────────────────────────────────────────────\n\ninterface HistoryButtonProps {\n onClick: () => void\n ariaLabel: string\n}\n\nfunction HistoryButton ({ onClick, ariaLabel }: HistoryButtonProps) {\n return (\n <button\n data-test-id='swap-form-simple-history-button'\n type='button'\n onClick={onClick}\n aria-label={ariaLabel}\n className={twMerge(\n 'inline-flex items-center justify-center',\n 'w-9 h-9',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border-none',\n 'cursor-pointer',\n 'bg-transparent',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]',\n 'transition-[background] duration-150',\n 'flex-shrink-0',\n 'outline-none',\n 'text-[color:var(--deframe-widget-color-text-secondary)]'\n )}\n >\n <svg\n data-test-id='swap-form-simple-history-icon'\n viewBox='0 0 24 24'\n width='20'\n height='20'\n fill='none'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden='true'\n >\n <circle cx='12' cy='12' r='10' />\n <polyline points='12 6 12 12 16 14' />\n </svg>\n </button>\n )\n}\n\n// ── SwapDirectionButton ─────────────────────────────────────────────────────\n\ninterface SwapDirectionButtonProps {\n onClick: () => void\n ariaLabel: string\n}\n\nfunction SwapDirectionButton ({ onClick, ariaLabel }: SwapDirectionButtonProps) {\n const [isHovered, setIsHovered] = useState(false)\n\n return (\n <motion.button\n data-test-id='swap-form-simple-direction-button'\n type='button'\n onClick={onClick}\n onMouseEnter={() => setIsHovered(true)}\n onMouseLeave={() => setIsHovered(false)}\n animate={{ rotate: isHovered ? 180 : 0 }}\n transition={{ duration: 0.25, ease: 'easeInOut' }}\n aria-label={ariaLabel}\n className={twMerge(\n 'inline-flex items-center justify-center',\n 'w-10 h-10',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[#12151c]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'outline-none',\n 'flex-shrink-0',\n 'shadow-[0px_2px_8px_0px_#0000003D]',\n 'cursor-pointer text-[color:var(--deframe-widget-color-brand-primary)]'\n )}\n >\n <svg\n data-test-id='swap-form-simple-direction-icon'\n width='18'\n height='18'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden='true'\n >\n <line x1='12' y1='5' x2='12' y2='19' />\n <polyline points='19 12 12 19 5 12' />\n </svg>\n </motion.button>\n )\n}\n\n// ── AdvancedPill ────────────────────────────────────────────────────────────\n\ninterface AdvancedPillProps {\n label: string\n isOpen: boolean\n onClick: () => void\n}\n\nfunction AdvancedPill ({ label, isOpen, onClick }: AdvancedPillProps) {\n return (\n <button\n data-test-id='swap-form-simple-advanced-pill'\n type='button'\n onClick={onClick}\n className={twMerge(\n 'inline-flex items-center gap-[5px]',\n 'py-[5px] px-[var(--deframe-widget-size-padding-x-sm)]',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n isOpen\n ? 'border border-[color:var(--deframe-widget-color-brand-primary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]'\n : 'border border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] bg-transparent',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]',\n 'cursor-pointer',\n 'text-[color:var(--deframe-widget-color-brand-primary)]',\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)]',\n 'outline-none',\n 'font-[inherit]',\n 'transition-[background] duration-150',\n 'flex-shrink-0'\n )}\n >\n <svg\n data-test-id='swap-form-simple-advanced-pill-icon'\n width='13'\n height='13'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n strokeLinejoin='round'\n aria-hidden='true'\n >\n <line x1='4' y1='6' x2='20' y2='6' />\n <line x1='4' y1='12' x2='20' y2='12' />\n <line x1='4' y1='18' x2='20' y2='18' />\n <circle cx='8' cy='6' r='2' fill='currentColor' stroke='none' />\n <circle cx='16' cy='12' r='2' fill='currentColor' stroke='none' />\n <circle cx='10' cy='18' r='2' fill='currentColor' stroke='none' />\n </svg>\n <span data-test-id='swap-form-simple-advanced-pill-label'>\n {label}\n </span>\n </button>\n )\n}\n\n// ── AdvancedPanelContent ────────────────────────────────────────────────────\n\ninterface AdvancedPanelContentProps {\n advancedSettings: SwapFormViewProps['advancedSettings']\n transactionDetails: SwapFormViewProps['transactionDetails']\n}\n\nfunction AdvancedPanelContent ({ advancedSettings, transactionDetails }: AdvancedPanelContentProps) {\n return (\n <div\n data-test-id='swap-form-simple-advanced-panel-content'\n className='px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'\n >\n {/* ── Header ── */}\n <div\n data-test-id='swap-form-simple-advanced-panel-header'\n className='flex justify-between items-center mb-[6px]'\n >\n <span\n data-test-id='swap-form-simple-advanced-panel-title'\n className='text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] font-[inherit]'\n >\n Avançado\n </span>\n <button\n data-test-id='swap-form-simple-advanced-panel-close'\n type='button'\n onClick={() => advancedSettings.onOpenChange(false)}\n aria-label='Close advanced panel'\n className={twMerge(\n 'inline-flex items-center justify-center',\n 'w-7 h-7',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border-none cursor-pointer bg-transparent',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]',\n 'transition-[background] duration-150',\n 'flex-shrink-0 outline-none',\n 'text-[color:var(--deframe-widget-color-text-secondary)]'\n )}\n >\n <svg\n data-test-id='swap-form-simple-advanced-panel-close-icon'\n viewBox='0 0 24 24'\n width='16'\n height='16'\n fill='currentColor'\n aria-hidden='true'\n >\n <path d='M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z' />\n </svg>\n </button>\n </div>\n\n {/* ── Exchange rate subtitle ── */}\n {transactionDetails.exchangeRateFormatted && (\n <p\n data-test-id='swap-form-simple-advanced-panel-subtitle'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] m-0 mb-[var(--deframe-widget-size-gap-sm)] leading-[1.4] font-[inherit]'\n >\n {transactionDetails.exchangeRateFormatted}\n </p>\n )}\n\n {/* ── Divider ── */}\n <div\n data-test-id='swap-form-simple-advanced-panel-divider'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)] mt-[var(--deframe-widget-size-gap-sm)]'\n />\n\n {/* ── Detail rows (from transactionDetails) ── */}\n <DetailRow label={transactionDetails.labels.exchangeRateLabel} value={transactionDetails.exchangeRateFormatted} />\n <DetailRow label={transactionDetails.labels.blockchainCostsLabel} value={transactionDetails.totalCostFormatted} />\n <DetailRow label={transactionDetails.labels.networkGasLabel} value={transactionDetails.gasCostFormatted} />\n <DetailRow label={transactionDetails.labels.protocolFeeLabel} value={transactionDetails.protocolFee} />\n <DetailRow label={transactionDetails.labels.slippageLabel} value={transactionDetails.slippageFormatted} />\n <DetailRow label={transactionDetails.labels.etaLabel} value={transactionDetails.etaFormatted} />\n {transactionDetails.quoteId && (\n <DetailRow label={transactionDetails.labels.quoteIdLabel} value={transactionDetails.quoteId} />\n )}\n\n {/* ── Divider before slippage controls ── */}\n <div\n data-test-id='swap-form-simple-advanced-panel-divider-2'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)] my-[var(--deframe-widget-size-gap-sm)]'\n />\n\n {/* ── Slippage tolerance controls ── */}\n <div data-test-id='swap-form-simple-advanced-panel-slippage'>\n <span\n data-test-id='swap-form-simple-advanced-panel-slippage-label'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.07em] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n Slippage: {advancedSettings.slippageFormatted}\n </span>\n <div\n data-test-id='swap-form-simple-advanced-panel-slippage-buttons'\n className='flex gap-[6px] mt-[var(--deframe-widget-size-gap-sm)]'\n >\n {[10, 50, 100].map((bps) => {\n const isActive = advancedSettings.slippageBps === bps\n return (\n <button\n key={bps}\n data-test-id='swap-form-simple-slippage-btn'\n type='button'\n onClick={() => advancedSettings.onSlippageSelect(bps)}\n className={twMerge(\n 'py-[3px] px-[10px]',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n 'text-[12px] font-[var(--deframe-widget-font-family)]',\n 'border cursor-pointer outline-none',\n 'transition-all duration-150',\n isActive\n ? 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)] [font-weight:var(--deframe-widget-font-weight-semibold)]'\n : 'border-[color:var(--deframe-widget-color-border-secondary)] bg-transparent text-[color:var(--deframe-widget-color-text-secondary)] hover:border-[color:var(--deframe-widget-color-border-primary)]'\n )}\n >\n {advancedSettings.formatPercentage(bps)}\n </button>\n )\n })}\n </div>\n </div>\n </div>\n )\n}\n\n// ── DetailRow ───────────────────────────────────────────────────────────────\n\ninterface DetailRowProps {\n label: string\n value: string\n}\n\nfunction DetailRow ({ label, value }: DetailRowProps) {\n if (!label && !value) return null\n return (\n <div\n data-test-id='swap-form-simple-detail-row'\n className='flex justify-between items-center py-[10px] gap-[var(--deframe-widget-size-gap-sm)]'\n >\n <span\n data-test-id='swap-form-simple-detail-row-label'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.07em] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)] flex-shrink-0'\n >\n {label}\n </span>\n <span\n data-test-id='swap-form-simple-detail-row-value'\n className='text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-right font-[var(--deframe-widget-font-family)] text-[color:var(--deframe-widget-color-text-primary)]'\n >\n {value}\n </span>\n </div>\n )\n}\n","import React, { useState, useEffect } from 'react'\nimport { ListItem, ListItemContent, ListItemLeftSide } from '../lists'\nimport { SearchInput } from '../search-input'\nimport { TextBody, TextHeading } from '../texts'\nimport { TertiaryButton } from '../buttons'\nimport { BackgroundContainer } from '../layout'\nimport type { ChooseANetworkLabels } from '../../types/choose-a-network-labels'\nimport type { ChainItem } from '../../types/chain-item'\n\nexport interface ChooseANetworkViewProps {\n labels: ChooseANetworkLabels\n autoFocus?: boolean\n chains: ChainItem[]\n pageSize?: number\n onChainClick: (chainId: number) => void\n}\n\nexport const ChooseANetworkView: React.FC<ChooseANetworkViewProps> = ({\n labels,\n autoFocus = true,\n chains,\n pageSize = 10,\n onChainClick,\n}) => {\n const [searchValue, setSearchValue] = useState('')\n const [page, setPage] = useState(1)\n\n useEffect(() => {\n setPage(1)\n }, [searchValue])\n\n const filteredChains = chains.filter((chain) =>\n chain.name.toLowerCase().includes(searchValue.toLowerCase())\n )\n\n const displayedChains = filteredChains.slice(0, page * pageSize)\n const hasMore = filteredChains.length > page * pageSize\n\n return (\n <BackgroundContainer className='flex flex-col h-full'>\n <div className='flex flex-col flex-1 w-full p-[var(--deframe-widget-size-padding-x-lg)] overflow-hidden'>\n <div className='flex-shrink-0'>\n <TextHeading>{labels.title}</TextHeading>\n <br />\n <SearchInput\n value={searchValue}\n onChange={setSearchValue}\n placeholder={labels.searchPlaceholder}\n autoFocus={autoFocus}\n />\n </div>\n <div\n data-testid='choose-a-network-list'\n className='flex flex-col gap-[var(--deframe-widget-size-gap-xs)] w-full mt-[var(--deframe-widget-size-gap-md)] overflow-y-auto flex-1 min-h-0'\n >\n {displayedChains.map((chain) => (\n <ListItem\n className='w-full flex-shrink-0'\n onClick={() => onChainClick(chain.chainId)}\n key={`chain-${chain.chainId}`}\n data-testid={`choose-network-item-${chain.chainId}`}\n data-chain-id={chain.chainId}\n >\n <ListItemLeftSide>\n <img\n src={chain.imageUrl}\n alt={chain.name}\n className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)]'\n />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{chain.name}</TextBody>\n </ListItemContent>\n </ListItem>\n ))}\n {hasMore && (\n <div className='flex justify-center items-center w-full py-[var(--deframe-widget-size-padding-y-md)] flex-shrink-0'>\n <TertiaryButton onClick={() => setPage(page + 1)}>\n {labels.loadMoreLabel}\n </TertiaryButton>\n </div>\n )}\n </div>\n </div>\n </BackgroundContainer>\n )\n}\n","import { useState, useEffect } from 'react'\n\nexport function useIsMobile (breakpoint = 640) {\n const [isMobile, setIsMobile] = useState(\n typeof window !== 'undefined' ? window.innerWidth < breakpoint : false\n )\n useEffect(() => {\n const check = () => setIsMobile(window.innerWidth < breakpoint)\n check()\n window.addEventListener('resize', check)\n return () => window.removeEventListener('resize', check)\n }, [breakpoint])\n return isMobile\n}\n","interface CloseButtonInlineProps {\n onClick: () => void\n ariaLabel: string\n}\n\nexport function CloseButtonInline ({ onClick, ariaLabel }: CloseButtonInlineProps) {\n const baseClasses = [\n 'inline-flex items-center justify-center',\n 'w-9 h-9',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border-none',\n 'cursor-pointer',\n 'bg-transparent',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_92%,transparent)]',\n 'transition-[background] duration-150',\n 'flex-shrink-0',\n 'outline-none',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n ].join(' ')\n\n return (\n <button\n data-test-id='close-button'\n onClick={onClick}\n aria-label={ariaLabel}\n className={baseClasses}\n >\n <svg\n data-test-id='close-button-icon'\n viewBox='0 0 24 24'\n width='20'\n height='20'\n fill='currentColor'\n aria-hidden='true'\n >\n <path d='M11.9997 10.5865L16.9495 5.63672L18.3637 7.05093L13.4139 12.0007L18.3637 16.9504L16.9495 18.3646L11.9997 13.4149L7.04996 18.3646L5.63574 16.9504L10.5855 12.0007L5.63574 7.05093L7.04996 5.63672L11.9997 10.5865Z' />\n </svg>\n </button>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface IconCircleProps {\n iconUrl?: string | null\n name: string\n size?: number\n className?: string\n}\n\nexport function IconCircle ({ iconUrl, name, size = 36, className }: IconCircleProps) {\n const [imgError, setImgError] = React.useState(false)\n\n if (iconUrl && !imgError) {\n return (\n <img\n data-test-id='icon-circle-img'\n src={iconUrl}\n alt={name}\n width={size}\n height={size}\n className={twMerge('rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 object-cover', className)}\n onError={() => setImgError(true)}\n />\n )\n }\n\n return (\n <div\n data-test-id='icon-circle-fallback'\n className={twMerge(\n 'rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 flex items-center justify-center',\n '[font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-text-primary-dark)]',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n className\n )}\n style={{\n width: size,\n height: size,\n fontSize: size * 0.33,\n letterSpacing: '-0.01em',\n }}\n >\n {name.slice(0, 2).toUpperCase()}\n </div>\n )\n}\n","/** Returns true if the formatted USD string represents >= $0.01 */\nexport function hasSignificantBalance (balanceUsd?: string): boolean {\n if (!balanceUsd) return false\n const num = parseFloat(balanceUsd.replace(/[^0-9.-]/g, ''))\n return !isNaN(num) && num >= 0.01\n}\n","import { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport type { NetworkOption } from '../../../types/network-option'\nimport { IconCircle } from './IconCircle'\nimport { hasSignificantBalance } from './hasSignificantBalance'\n\nexport interface NetworkRowProps {\n network: NetworkOption\n selected: boolean\n onClick: () => void\n onKeyDown: (e: React.KeyboardEvent) => void\n index: number\n}\n\nexport function NetworkRow ({ network, selected, onClick, onKeyDown, index }: NetworkRowProps) {\n const baseClasses = [\n 'relative flex items-center gap-[10px]',\n 'py-[9px] px-[var(--deframe-widget-size-padding-x-sm)] pl-[14px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'cursor-pointer',\n 'outline-none',\n 'mb-[var(--deframe-widget-size-gap-none)].5',\n 'transition-[background] duration-150',\n ].join(' ')\n\n const stateClasses = {\n selected: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]',\n default: 'bg-transparent hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]',\n } as const\n\n const rowClasses = twMerge(baseClasses, stateClasses[selected ? 'selected' : 'default'])\n\n const nameClasses = [\n 'text-[14px] [font-weight:var(--deframe-widget-font-weight-medium)]',\n selected ? 'text-[color:var(--deframe-widget-color-text-primary)]' : 'text-[color:var(--deframe-widget-color-text-secondary)]',\n ].join(' ')\n\n return (\n <motion.div\n data-test-id='network-row'\n role='option'\n aria-selected={selected}\n aria-label={network.name}\n tabIndex={0}\n onClick={onClick}\n onKeyDown={onKeyDown}\n data-chain-index={index}\n className={rowClasses}\n >\n {selected && (\n <motion.div\n data-test-id='network-row-accent'\n layoutId='chain-accent'\n className='absolute left-0 top-2 bottom-2 w-[3px] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-brand-primary)]'\n transition={{ type: 'spring', stiffness: 400, damping: 30 }}\n />\n )}\n <IconCircle\n iconUrl={network.iconUrl}\n name={network.name}\n size={34}\n />\n <div\n data-test-id='network-row-content'\n className='flex-1 min-w-0'\n >\n <div\n data-test-id='network-row-name'\n className={nameClasses}\n >\n {network.name}\n </div>\n {hasSignificantBalance(network.balanceUsd) && (\n <div\n data-test-id='network-row-balance'\n className='text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)] mt-px'\n >\n {network.balanceUsd}\n </div>\n )}\n </div>\n </motion.div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport type { NetworkOption } from '../../../types/network-option'\nimport { IconCircle } from './IconCircle'\nimport { hasSignificantBalance } from './hasSignificantBalance'\n\nexport interface NetworkChipProps {\n network: NetworkOption\n selected: boolean\n onClick: () => void\n}\n\nexport function NetworkChip ({ network, selected, onClick }: NetworkChipProps) {\n const baseClasses = [\n 'inline-flex items-center gap-[var(--deframe-widget-size-gap-sm)]',\n 'py-[var(--deframe-widget-size-padding-y-sm)] pl-[var(--deframe-widget-size-padding-x-sm)] pr-[14px]',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n 'cursor-pointer',\n 'whitespace-nowrap',\n 'transition-all duration-150',\n 'flex-shrink-0',\n 'outline-none',\n 'border',\n ].join(' ')\n\n const stateClasses = {\n selected: 'border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)]',\n default: 'border-[color:var(--deframe-widget-color-border-secondary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]',\n } as const\n\n const buttonClasses = twMerge(baseClasses, stateClasses[selected ? 'selected' : 'default'])\n\n const nameLabelClasses = [\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)] leading-[1.2]',\n selected ? 'text-[color:var(--deframe-widget-color-brand-primary)]' : 'text-[color:var(--deframe-widget-color-text-secondary)]',\n ].join(' ')\n\n return (\n <button\n data-test-id='network-chip'\n onClick={onClick}\n aria-label={network.name}\n className={buttonClasses}\n >\n <IconCircle\n iconUrl={network.iconUrl}\n name={network.name}\n size={24}\n />\n <div\n data-test-id='network-chip-content'\n className='text-left'\n >\n <div\n data-test-id='network-chip-label'\n className={nameLabelClasses}\n >\n {network.name}\n </div>\n {hasSignificantBalance(network.balanceUsd) && (\n <div\n data-test-id='network-chip-balance'\n className='text-[11px] text-[color:var(--deframe-widget-color-text-tertiary)] leading-[1.4]'\n >\n {network.balanceUsd}\n </div>\n )}\n </div>\n </button>\n )\n}\n","import * as React from 'react'\n\ninterface SearchInputInlineProps {\n value: string\n onChange: (value: string) => void\n placeholder: string\n onArrowDown?: () => void\n autoFocus?: boolean\n}\n\nexport const SearchInputInline = React.forwardRef<HTMLInputElement, SearchInputInlineProps>(\n ({ value, onChange, placeholder, onArrowDown, autoFocus }, ref) => {\n const inputClasses = [\n 'w-full box-border h-10',\n 'bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'py-[var(--deframe-widget-size-padding-y-none)] pr-[var(--deframe-widget-size-padding-x-xl)] pl-[14px]',\n 'text-[14px] text-[color:var(--deframe-widget-color-text-primary)]',\n 'outline-none focus:outline-none',\n 'focus:border-[color:var(--deframe-widget-color-brand-primary)]',\n 'transition-colors duration-150',\n 'font-[var(--deframe-widget-font-family)]',\n 'placeholder:text-[color:var(--deframe-widget-color-text-tertiary)]',\n ].join(' ')\n\n return (\n <div\n data-test-id='search-input-wrapper'\n className='relative'\n >\n <input\n data-test-id='search-input'\n ref={ref}\n type='text'\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n aria-label={placeholder}\n autoFocus={autoFocus}\n onKeyDown={(e) => {\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n onArrowDown?.()\n }\n }}\n className={inputClasses}\n />\n <div\n data-test-id='search-input-icon'\n className='absolute right-3 top-1/2 -translate-y-1/2 pointer-events-none text-[color:var(--deframe-widget-color-text-tertiary)]'\n >\n <svg\n width='15'\n height='15'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2'\n strokeLinecap='round'\n aria-hidden='true'\n >\n <circle cx='11' cy='11' r='8' />\n <line x1='21' y1='21' x2='16.65' y2='16.65' />\n </svg>\n </div>\n </div>\n )\n }\n)\nSearchInputInline.displayName = 'SearchInputInline'\n","import { twMerge } from 'tailwind-merge'\nimport type { TokenData } from '../../../types/token-data'\nimport type { BalanceDomain } from '../../../types/balance-domain'\nimport { IconCircle } from './IconCircle'\n\nexport interface AssetRowInlineProps {\n token: TokenData\n balance: BalanceDomain | undefined\n formatTokenAmount: (amountUI: string, priceUSD: number, decimals: number) => string\n formatCurrencyValue: (value: number) => string\n onClick: () => void\n onKeyDown: (e: React.KeyboardEvent) => void\n index: number\n}\n\nexport function AssetRowInline ({\n token, balance, formatTokenAmount, formatCurrencyValue,\n onClick, onKeyDown, index,\n}: AssetRowInlineProps) {\n const hasBalance = !!balance && parseFloat(balance.amountInUSD) >= 0.01\n\n const formattedAmount = balance\n ? formatTokenAmount(balance.amountUI, token.priceInUSD ?? 0, token.decimals)\n : undefined\n\n const formattedUsd = balance\n ? formatCurrencyValue(parseFloat(balance.amountInUSD))\n : undefined\n\n const baseClasses = [\n 'group',\n 'relative flex items-center gap-[var(--deframe-widget-size-gap-sm)]',\n 'py-[10px] px-[14px]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'cursor-pointer outline-none',\n 'transition-[background] duration-150',\n ].join(' ')\n\n const rowClasses = twMerge(baseClasses, 'bg-transparent hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]')\n\n return (\n <div\n data-test-id='asset-row'\n role='option'\n aria-selected={false}\n aria-label={`${token.name} ${token.symbol}`}\n tabIndex={0}\n onClick={onClick}\n onKeyDown={onKeyDown}\n data-asset-index={index}\n className={rowClasses}\n >\n <IconCircle\n iconUrl={token.logoURI}\n name={token.name}\n size={38}\n />\n <div\n data-test-id='asset-row-content'\n className='flex-1 min-w-0'\n >\n <div\n data-test-id='asset-row-symbol'\n className='text-[14px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)]'\n >\n {token.symbol}\n </div>\n <div\n data-test-id='asset-row-name'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] mt-px'\n >\n {token.name}\n </div>\n </div>\n {hasBalance\n ? (\n <div\n data-test-id='asset-row-balance'\n className='flex-shrink-0 text-right'\n >\n {formattedAmount && (\n <div\n data-test-id='asset-row-balance-amount'\n className='text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-primary)]'\n >\n {formattedAmount}{' '}\n <span\n data-test-id='asset-row-balance-symbol'\n className='text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)] [font-weight:var(--deframe-widget-font-weight-regular)]'\n >\n {token.symbol}\n </span>\n </div>\n )}\n {formattedUsd && (\n <div\n data-test-id='asset-row-balance-usd'\n className='text-[12px] text-[color:var(--deframe-widget-color-text-secondary)] mt-[var(--deframe-widget-size-gap-none)].5'\n >\n {formattedUsd}\n </div>\n )}\n </div>\n )\n : <></>}\n </div>\n )\n}\n","export function TokensLoadingState ({ label }: { label: string }) {\n return (\n <div\n data-test-id='tokens-loading-state'\n className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)] px-[14px] py-[var(--deframe-widget-size-padding-y-sm)]'\n >\n {Array.from({ length: 5 }).map((_, i) => (\n <div\n key={i}\n data-test-id={`tokens-loading-skeleton-${i}`}\n className='flex items-center gap-[var(--deframe-widget-size-gap-sm)] animate-pulse'\n >\n <div className='w-[38px] h-[38px] rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex-shrink-0' />\n <div className='flex-1 min-w-0 flex flex-col gap-[6px]'>\n <div className='h-[14px] w-[60%] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-bg-tertiary)]' />\n <div className='h-[12px] w-[40%] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-bg-tertiary)]' />\n </div>\n <div className='flex-shrink-0 flex flex-col items-end gap-[6px]'>\n <div className='h-[13px] w-[50px] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-bg-tertiary)]' />\n <div className='h-[12px] w-[36px] rounded-[var(--deframe-widget-size-radius-xs)] bg-[var(--deframe-widget-color-bg-tertiary)]' />\n </div>\n </div>\n ))}\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport type { TokenData } from '../../../types/token-data'\nimport type { BalanceDomain } from '../../../types/balance-domain'\nimport type { ChooseNetworkAndAssetLabels } from './ChooseNetworkAndAssetViewSimple'\nimport { SearchInputInline } from './SearchInputInline'\nimport { AssetRowInline } from './AssetRowInline'\nimport { TokensLoadingState } from './TokensLoadingState'\n\nexport interface AssetSearchAndListProps {\n query: string\n setQuery: (q: string) => void\n searchRef: React.RefObject<HTMLInputElement | null>\n assetListRef: React.RefObject<HTMLDivElement | null>\n displayedTokens: TokenData[]\n findBalance: (token: TokenData) => BalanceDomain | undefined\n formatTokenAmount: (amountUI: string, priceUSD: number, decimals: number) => string\n formatCurrencyValue: (value: number) => string\n isMobile: boolean\n onAssetClick: (token: TokenData) => void\n handleAssetKeyDown: (e: React.KeyboardEvent, token: TokenData, idx: number) => void\n isFetching: boolean\n hasMore: boolean\n onLoadMore: () => void\n labels: ChooseNetworkAndAssetLabels\n autoFocus?: boolean\n}\n\nexport function AssetSearchAndList ({\n query, setQuery, searchRef, assetListRef, displayedTokens,\n findBalance, formatTokenAmount, formatCurrencyValue,\n isMobile, onAssetClick, handleAssetKeyDown,\n isFetching, hasMore, onLoadMore, labels, autoFocus,\n}: AssetSearchAndListProps) {\n return (\n <div\n data-test-id='search-and-assets'\n className='flex flex-col flex-1 overflow-hidden'\n >\n {/* Search input */}\n <div\n data-test-id='search-wrapper'\n className={twMerge(\n 'px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)] flex-shrink-0',\n isMobile\n ? 'pt-[var(--deframe-widget-size-padding-y-none)]'\n : 'pt-[var(--deframe-widget-size-padding-y-sm)]'\n )}\n >\n <SearchInputInline\n ref={searchRef}\n value={query}\n onChange={setQuery}\n placeholder={labels.searchPlaceholder}\n autoFocus={autoFocus}\n onArrowDown={() => {\n assetListRef.current?.querySelector<HTMLElement>(\"[data-asset-index='0']\")?.focus()\n }}\n />\n </div>\n\n {/* Section label */}\n <div\n data-test-id='section-label'\n className='px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-xs)] flex-shrink-0 text-[11px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-tertiary)] tracking-[0.06em] uppercase'\n >\n {labels.assetsLabel}\n </div>\n\n {/* Asset list */}\n <div\n ref={assetListRef}\n role='listbox'\n aria-label={labels.assetsLabel}\n data-test-id='asset-list'\n className='flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-sm)] pb-[var(--deframe-widget-size-padding-y-sm)] pt-[var(--deframe-widget-size-padding-y-xs)]'\n >\n {isFetching\n ? (\n <TokensLoadingState label={labels.searchingText} />\n )\n : displayedTokens.length === 0\n ? (\n <div\n data-test-id='no-results'\n className='py-[var(--deframe-widget-size-padding-y-xl)] px-[var(--deframe-widget-size-padding-x-md)] text-center'\n >\n <div\n data-test-id='no-results-title'\n className='text-[14px] text-[color:var(--deframe-widget-color-text-secondary)] mb-[var(--deframe-widget-size-gap-xs)]'\n >\n {labels.searchEmptyTitle}\n </div>\n <div\n data-test-id='no-results-description'\n className='text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)]'\n >\n {labels.searchEmptyDescription}\n </div>\n </div>\n )\n : (\n <>\n {displayedTokens.map((token, i) => (\n <AssetRowInline\n key={`${token.chainId}-${token.address}-${i}`}\n token={token}\n balance={findBalance(token)}\n formatTokenAmount={formatTokenAmount}\n formatCurrencyValue={formatCurrencyValue}\n onClick={() => onAssetClick(token)}\n onKeyDown={(e) => handleAssetKeyDown(e, token, i)}\n index={i}\n />\n ))}\n {hasMore && (\n <div\n data-test-id='load-more-wrapper'\n className='flex justify-center py-[var(--deframe-widget-size-padding-y-sm)]'\n >\n <button\n data-test-id='load-more-button'\n aria-label={labels.loadMoreButton}\n onClick={onLoadMore}\n className={[\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-medium)]',\n 'text-[color:var(--deframe-widget-color-brand-primary)]',\n 'bg-transparent border-none cursor-pointer outline-none',\n 'hover:underline',\n 'font-[var(--deframe-widget-font-family)]',\n ].join(' ')}\n >\n {labels.loadMoreButton}\n </button>\n </div>\n )}\n </>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport type { TokenData } from '../../../types/token-data'\nimport type { NetworkOption } from '../../../types/network-option'\nimport type { BalanceDomain } from '../../../types/balance-domain'\nimport { useIsMobile } from '../../../utils/useIsMobile'\nimport { CloseButtonInline } from './CloseButtonInline'\nimport { NetworkRow } from './NetworkRow'\nimport { NetworkChip } from './NetworkChip'\nimport { AssetSearchAndList } from './AssetSearchAndList'\n\n// ── Labels ──────────────────────────────────────────────────────────────────\n\nexport interface ChooseNetworkAndAssetLabels {\n title: string\n searchPlaceholder: string\n searchingText: string\n loadMoreButton: string\n searchEmptyTitle: string\n searchEmptyDescription: string\n networksLabel: string\n assetsLabel: string\n closeAriaLabel: string\n}\n\n// ── Props ───────────────────────────────────────────────────────────────────\n\nexport interface ChooseNetworkAndAssetViewSimpleProps {\n isOpen: boolean\n onClose: () => void\n networks: NetworkOption[]\n selectedNetwork?: NetworkOption | null\n onNetworkSelect: (network: NetworkOption) => void\n displayedTokens: TokenData[]\n findBalance: (token: TokenData) => BalanceDomain | undefined\n formatTokenAmount: (amountUI: string, priceUSD: number, decimals: number) => string\n formatCurrencyValue: (value: number) => string\n onAssetClick: (token: TokenData) => void\n onSearch: (value: string) => void\n autoFocus?: boolean\n hasMore: boolean\n onLoadMore: () => void\n isFetching: boolean\n labels: ChooseNetworkAndAssetLabels\n}\n\n// ── Main Component ──────────────────────────────────────────────────────────\n\nexport function ChooseNetworkAndAssetViewSimple ({\n isOpen,\n onClose,\n networks,\n selectedNetwork,\n onNetworkSelect,\n displayedTokens,\n findBalance,\n formatTokenAmount,\n formatCurrencyValue,\n onAssetClick,\n onSearch,\n autoFocus,\n hasMore,\n onLoadMore,\n isFetching,\n labels,\n}: ChooseNetworkAndAssetViewSimpleProps) {\n const [query, setQuery] = React.useState('')\n const searchRef = React.useRef<HTMLInputElement>(null)\n const chainListRef = React.useRef<HTMLDivElement>(null)\n const assetListRef = React.useRef<HTMLDivElement>(null)\n const isMobile = useIsMobile()\n\n // Resolve the active network\n const activeNetwork = selectedNetwork ?? networks[0] ?? null\n\n // Propagate search to host\n const handleQueryChange = React.useCallback((q: string) => {\n setQuery(q)\n onSearch(q)\n }, [onSearch])\n\n // Network selection: reset search, notify host\n const handleNetworkSelect = React.useCallback((network: NetworkOption) => {\n setQuery('')\n onSearch('')\n onNetworkSelect(network)\n searchRef.current?.focus()\n }, [onSearch, onNetworkSelect])\n\n // Escape closes modal\n React.useEffect(() => {\n if (!isOpen) return\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose() }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [isOpen, onClose])\n\n // Auto-focus search input on open\n React.useEffect(() => {\n if (isOpen && autoFocus) {\n const id = requestAnimationFrame(() => searchRef.current?.focus())\n return () => cancelAnimationFrame(id)\n }\n }, [isOpen, autoFocus])\n\n // Keyboard: chain navigation\n const handleChainKeyDown = React.useCallback((e: React.KeyboardEvent, network: NetworkOption, idx: number) => {\n if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); handleNetworkSelect(network) }\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n chainListRef.current?.querySelector<HTMLElement>(`[data-chain-index=\"${idx + 1}\"]`)?.focus()\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n chainListRef.current?.querySelector<HTMLElement>(`[data-chain-index=\"${idx - 1}\"]`)?.focus()\n }\n }, [handleNetworkSelect])\n\n // Keyboard: asset navigation\n const handleAssetKeyDown = React.useCallback((e: React.KeyboardEvent, token: TokenData, idx: number) => {\n if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onAssetClick(token) }\n if (e.key === 'ArrowDown') {\n e.preventDefault()\n assetListRef.current?.querySelector<HTMLElement>(`[data-asset-index=\"${idx + 1}\"]`)?.focus()\n }\n if (e.key === 'ArrowUp') {\n e.preventDefault()\n if (idx === 0) { searchRef.current?.focus(); return }\n assetListRef.current?.querySelector<HTMLElement>(`[data-asset-index=\"${idx - 1}\"]`)?.focus()\n }\n }, [onAssetClick])\n\n const content = isOpen ? renderContent() : null\n\n return <AnimatePresence>{content}</AnimatePresence>\n\n // ── Render content ──────────────────────────────────────────────────────\n function renderContent () {\n const sharedSearchAssets = (\n <AssetSearchAndList\n query={query}\n setQuery={handleQueryChange}\n searchRef={searchRef}\n assetListRef={assetListRef}\n displayedTokens={displayedTokens}\n findBalance={findBalance}\n formatTokenAmount={formatTokenAmount}\n formatCurrencyValue={formatCurrencyValue}\n isMobile={isMobile}\n onAssetClick={onAssetClick}\n handleAssetKeyDown={handleAssetKeyDown}\n isFetching={isFetching}\n hasMore={hasMore}\n onLoadMore={onLoadMore}\n labels={labels}\n autoFocus={autoFocus}\n />\n )\n\n // ── Mobile: Action Sheet ────────────────────────────────────────────────\n if (isMobile) {\n return (\n <motion.div\n key='mobile'\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={onClose}\n data-test-id='backdrop'\n className='fixed inset-0 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)] backdrop-blur-[4px] z-50 flex flex-col justify-end'\n >\n <motion.div\n role='dialog'\n aria-modal='true'\n aria-label={labels.title}\n initial={{ y: '100%' }}\n animate={{ y: 0 }}\n exit={{ y: '100%' }}\n transition={{ type: 'spring', stiffness: 320, damping: 32, mass: 0.8 }}\n onClick={(e) => e.stopPropagation()}\n data-test-id='sheet'\n className={[\n 'bg-[var(--deframe-widget-color-bg-secondary)] flex flex-col overflow-hidden',\n 'rounded-t-[var(--deframe-widget-size-radius-lg)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)] border-b-0',\n 'shadow-[0px_4px_16px_0px_#00000066,0px_24px_80px_0px_#00000099]',\n 'max-h-[88vh]',\n ].join(' ')}\n >\n {/* Drag handle */}\n <div\n data-test-id='drag-handle'\n className='flex justify-center pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-xs)].5 flex-shrink-0'\n >\n <div className='w-9 h-1 rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-border-primary)]' />\n </div>\n\n {/* Header */}\n <div\n data-test-id='sheet-header'\n className='flex items-center justify-between pt-[var(--deframe-widget-size-padding-y-xs)].5 pr-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)].5 pl-[var(--deframe-widget-size-padding-x-md)] flex-shrink-0'\n >\n <span\n data-test-id='sheet-title'\n className='text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] font-[var(--deframe-widget-font-family)]'\n >\n {labels.title}\n </span>\n <CloseButtonInline onClick={onClose} ariaLabel={labels.closeAriaLabel} />\n </div>\n\n {/* Network chips section */}\n <div\n data-test-id='network-section'\n className='flex-shrink-0 pb-[var(--deframe-widget-size-padding-y-sm)].5'\n >\n <div\n data-test-id='network-section-label'\n className='text-[11px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-tertiary)] tracking-[0.06em] uppercase px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)]'\n >\n {labels.networksLabel}\n </div>\n <div\n ref={chainListRef}\n role='listbox'\n aria-label={labels.networksLabel}\n data-test-id='network-chip-list'\n className='flex gap-[var(--deframe-widget-size-gap-sm)] overflow-x-auto px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-xs)] [scrollbar-width:none]'\n >\n {networks.map((network) => (\n <NetworkChip\n key={network.chainId}\n network={network}\n selected={activeNetwork?.chainId === network.chainId}\n onClick={() => handleNetworkSelect(network)}\n />\n ))}\n </div>\n </div>\n\n {/* Divider */}\n <div\n data-test-id='divider'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0'\n />\n\n {/* Body */}\n <div\n data-test-id='sheet-body'\n className='flex-1 flex flex-col overflow-hidden pt-[var(--deframe-widget-size-padding-y-xs)]'\n >\n {sharedSearchAssets}\n </div>\n </motion.div>\n </motion.div>\n )\n }\n\n // ── Desktop: Centered Modal ─────────────────────────────────────────────\n return (\n <motion.div\n key='desktop'\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={onClose}\n data-test-id='backdrop'\n className='fixed inset-0 bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-primary)_88%,transparent)] backdrop-blur-[4px] z-50 flex items-center justify-center px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'\n >\n <motion.div\n role='dialog'\n aria-modal='true'\n aria-label={labels.title}\n initial={{ opacity: 0, scale: 0.96 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.96 }}\n transition={{ duration: 0.2, ease: 'easeOut' }}\n onClick={(e) => e.stopPropagation()}\n data-test-id='modal'\n className={[\n 'w-[min(680px,calc(100vw-32px))]',\n 'h-[min(620px,calc(100vh-64px))]',\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'rounded-[var(--deframe-widget-size-radius-md)]',\n 'shadow-[0px_4px_16px_0px_#00000066,0px_24px_80px_0px_#00000099]',\n 'flex flex-col overflow-hidden',\n ].join(' ')}\n >\n {/* Header */}\n <div\n data-test-id='modal-header'\n className='flex items-center justify-between pt-[var(--deframe-widget-size-padding-y-md)] pr-[var(--deframe-widget-size-padding-x-md)] pb-[14px] pl-[var(--deframe-widget-size-padding-x-md)] border-b border-[color:var(--deframe-widget-color-border-secondary)] flex-shrink-0'\n >\n <span\n data-test-id='modal-title'\n className='text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] font-[var(--deframe-widget-font-family)]'\n >\n {labels.title}\n </span>\n <CloseButtonInline onClick={onClose} ariaLabel={labels.closeAriaLabel} />\n </div>\n\n {/* Body */}\n <div\n data-test-id='modal-body'\n className='flex flex-1 overflow-hidden'\n >\n {/* Left — Networks */}\n <div\n data-test-id='network-sidebar'\n className={[\n 'w-[210px] flex-shrink-0',\n 'border-r border-[color:var(--deframe-widget-color-border-secondary)]',\n 'bg-[#12151C]',\n 'flex flex-col overflow-hidden',\n ].join(' ')}\n >\n <div\n data-test-id='network-sidebar-label'\n className='px-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-sm)] pb-[var(--deframe-widget-size-padding-y-xs)].5 text-[11px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-tertiary)] tracking-[0.06em] uppercase'\n >\n {labels.networksLabel}\n </div>\n <div\n ref={chainListRef}\n role='listbox'\n aria-label={labels.networksLabel}\n data-test-id='network-list'\n className='flex-1 overflow-y-auto px-[var(--deframe-widget-size-padding-x-sm)] pb-[var(--deframe-widget-size-padding-y-sm)] pt-[var(--deframe-widget-size-padding-y-xs)]'\n >\n {networks.map((network, i) => (\n <NetworkRow\n key={network.chainId}\n network={network}\n selected={activeNetwork?.chainId === network.chainId}\n onClick={() => handleNetworkSelect(network)}\n onKeyDown={(e) => handleChainKeyDown(e, network, i)}\n index={i}\n />\n ))}\n </div>\n </div>\n\n {/* Right — Assets */}\n <div\n data-test-id='asset-panel'\n className='flex-1 flex flex-col overflow-hidden'\n >\n {sharedSearchAssets}\n </div>\n </div>\n </motion.div>\n </motion.div>\n )\n } // end renderContent\n}\n","import React from 'react'\n\nconst SkeletonItem: React.FC = () => (\n <div className='w-full bg-[var(--deframe-widget-color-bg-secondary)] rounded-[var(--deframe-widget-size-radius-xs)] min-h-[72px] flex items-center justify-between px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-sm)]'>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)] flex-1 min-w-0'>\n <div className='w-10 h-10 rounded-xl bg-[var(--deframe-widget-color-bg-tertiary)] animate-pulse flex-shrink-0' />\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-xs)] flex-1 min-w-0'>\n <div className='w-32 h-4 bg-[var(--deframe-widget-color-bg-tertiary)] rounded animate-pulse' />\n <div className='w-24 h-3 bg-[var(--deframe-widget-color-bg-tertiary)] rounded animate-pulse' />\n </div>\n </div>\n <div className='flex flex-col items-end gap-[var(--deframe-widget-size-gap-xs)] flex-shrink-0 ml-[var(--deframe-widget-size-gap-sm)]'>\n <div className='w-20 h-4 bg-[var(--deframe-widget-color-bg-tertiary)] rounded animate-pulse' />\n <div className='w-16 h-3 bg-[var(--deframe-widget-color-bg-tertiary)] rounded animate-pulse' />\n </div>\n </div>\n)\n\nconst SkeletonGroup: React.FC = () => (\n <div className='self-stretch flex flex-col gap-[var(--deframe-widget-size-gap-xs)]'>\n <div className='w-40 h-4 bg-[var(--deframe-widget-color-bg-tertiary)] rounded animate-pulse' />\n <SkeletonItem />\n <SkeletonItem />\n </div>\n)\n\nexport const LoadingSkeleton: React.FC = () => (\n <div className='self-stretch flex flex-col gap-[var(--deframe-widget-size-gap-md)]'>\n <SkeletonGroup />\n <SkeletonGroup />\n </div>\n)\n","import React from 'react'\nimport { PiClockCountdownBold } from 'react-icons/pi'\nimport { TextBody, TextHeading } from '../texts'\n\nexport interface EmptyStateProps {\n title: string\n description: string\n}\n\nexport const EmptyState: React.FC<EmptyStateProps> = ({ title, description }) => (\n <div className='w-full flex-1 py-[var(--deframe-widget-size-padding-y-md)] flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-sm)] overflow-hidden'>\n <div className='w-full flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-md)]'>\n <div className='flex flex-col justify-center items-center gap-[var(--deframe-widget-size-gap-md)] text-center'>\n <div className='w-20 h-20 bg-[var(--deframe-widget-color-bg-tertiary)] rounded-[var(--deframe-widget-size-radius-full)] flex justify-center items-center'>\n <PiClockCountdownBold className='w-10 h-10 text-[var(--deframe-widget-color-text-tertiary)]' />\n </div>\n <TextHeading variant='h3'>{title}</TextHeading>\n </div>\n <div className='self-stretch text-center'>\n <TextBody variant='text-small'>{description}</TextBody>\n </div>\n </div>\n </div>\n)\n","import React from 'react'\nimport { MdArrowUpward } from 'react-icons/md'\n\nexport interface SwapItemIconProps {\n src: string\n alt: string\n}\n\nexport const SwapItemIcon: React.FC<SwapItemIconProps> = ({ src, alt }) => {\n const fallbackText = encodeURIComponent((alt || 'TOK').slice(0, 3).toUpperCase())\n const fallbackSrc = `https://placehold.co/40x40?text=${fallbackText}`\n const resolvedSrc = src || fallbackSrc\n\n return (\n <div className='relative flex-shrink-0'>\n <div className='w-10 h-10 rounded-xl bg-[var(--deframe-widget-color-bg-tertiary)] flex items-center justify-center overflow-hidden'>\n <img\n src={resolvedSrc}\n alt={alt}\n className='w-full h-full object-cover'\n onError={(e) => {\n ;(e.target as HTMLImageElement).src = fallbackSrc\n }}\n />\n </div>\n <div className='absolute bottom-[-2px] right-[-2px] w-[15px] h-[15px] rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-secondary)] flex items-center justify-center border border-[var(--deframe-widget-color-bg-secondary)]'>\n <MdArrowUpward className='w-3 h-3 text-[var(--deframe-widget-color-text-primary)]' />\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { BackgroundContainer } from '../layout'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { TertiaryButton } from '../buttons'\nimport type { SwapHistoryLabels } from '../../types/swap-history-labels'\nimport type { SwapHistoryItem } from '../../types/swap-history-item'\nimport { LoadingSkeleton } from './LoadingSkeleton'\nimport { EmptyState } from './EmptyState'\nimport { SwapItemIcon } from './SwapItemIcon'\n\nexport interface SwapHistoryViewProps {\n labels: SwapHistoryLabels\n isLoading: boolean\n items: SwapHistoryItem[]\n onItemClick: (itemId: string) => void\n pageSize?: number\n}\n\nexport const SwapHistoryView: React.FC<SwapHistoryViewProps> = ({\n labels,\n isLoading,\n items,\n onItemClick,\n pageSize = 10,\n}) => {\n const [visibleCount, setVisibleCount] = React.useState(pageSize)\n\n if (isLoading) {\n return (\n <BackgroundContainer className='px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col min-h-0 flex-1'>\n <LoadingSkeleton />\n </BackgroundContainer>\n )\n }\n\n if (items.length === 0) {\n return (\n <BackgroundContainer className='px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col min-h-0 flex-1'>\n <EmptyState title={labels.emptyTitle} description={labels.emptyDescription} />\n </BackgroundContainer>\n )\n }\n\n // Group items by dateKey\n const visibleItems = items.slice(0, visibleCount)\n const grouped = new Map<string, SwapHistoryItem[]>()\n for (const item of visibleItems) {\n const group = grouped.get(item.dateKey)\n if (group) {\n group.push(item)\n } else {\n grouped.set(item.dateKey, [item])\n }\n }\n const sortedDates = Array.from(grouped.keys()).sort((a, b) => b.localeCompare(a))\n const hasMore = items.length > visibleCount\n\n return (\n <BackgroundContainer className='px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)] flex flex-col min-h-0 flex-1'>\n <div className='self-stretch flex flex-col gap-[16px]'>\n {sortedDates.map((dateKey) => {\n const groupItems = grouped.get(dateKey)!\n return (\n <div key={dateKey} className='self-stretch flex flex-col gap-[var(--deframe-widget-size-gap-sm)]'>\n <div className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {groupItems[0].dateLabel}\n </div>\n\n {groupItems.map((item) => (\n <ListItem\n key={item.id}\n onClick={() => onItemClick(item.id)}\n containerClassName='!rounded-[var(--deframe-widget-size-radius-xs)] !border-0 !min-h-[72px]'\n >\n <ListItemLeftSide>\n <SwapItemIcon src={item.iconUrl} alt={item.iconAlt} />\n </ListItemLeftSide>\n <ListItemContent>\n <span className='[font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-primary)]'>\n {item.title}\n </span>\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {item.subtitle}\n </span>\n </ListItemContent>\n <ListItemRightSide>\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] [font-weight:var(--deframe-widget-font-weight-medium)] text-[color:var(--deframe-widget-color-text-primary)] whitespace-nowrap'>\n {item.amountFormatted}\n </span>\n {item.amountUsd && (\n <span className='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)] text-[color:var(--deframe-widget-color-text-secondary)] whitespace-nowrap'>\n {item.amountUsd}\n </span>\n )}\n </ListItemRightSide>\n </ListItem>\n ))}\n </div>\n )\n })}\n\n {hasMore && (\n <div className='flex justify-center pt-[var(--deframe-widget-size-padding-y-sm)]'>\n <TertiaryButton onClick={() => setVisibleCount((c) => c + pageSize)}>\n {labels.loadMoreLabel}\n </TertiaryButton>\n </div>\n )}\n </div>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\nimport { BackgroundContainer, FlexCol, FlexRow, SectionCard, ScrollableContent } from '../layout'\nimport { DetailsHeader } from '../details-header'\nimport { InfoRow, InfoLabel, InfoValue } from '../info-display'\nimport {\n Amount,\n AmountInUsd,\n ExplorerLink,\n NotFoundMessage,\n SuccessBadge,\n TokenIcon,\n TransactionId,\n TransactionTypeLabel,\n TwoLineValue,\n} from '../history-details/HistoryDetailsComponents'\nimport type { HistorySwapDetailsLabels } from '../../types/history-swap-details-labels'\n\n// ─── Discriminated union props ───\n\ninterface BaseProps {\n labels: HistorySwapDetailsLabels\n onBack: () => void\n}\n\ninterface NotFoundProps extends BaseProps {\n status: 'not-found'\n}\n\ninterface UnavailableProps extends BaseProps {\n status: 'unavailable'\n}\n\ninterface LoadedProps extends BaseProps {\n status: 'loaded'\n\n // Asset In\n symbolIn: string\n amountInFormatted: string\n amountInUsd: string | null\n tokenInLogoUrl: string\n chainInName: string | null\n\n // Asset Out\n symbolOut: string\n amountOutFormatted: string\n amountOutUsd: string | null\n tokenOutLogoUrl: string\n chainOutName: string | null\n\n // Details\n routeOrNetworkLabel: string\n routeOrNetworkValue: string\n statusLabel: string\n txHash: string | null\n dateFormatted: string\n explorerUrl: string | null\n}\n\nexport type HistorySwapDetailsViewProps = NotFoundProps | UnavailableProps | LoadedProps\n\nexport const HistorySwapDetailsView: React.FC<HistorySwapDetailsViewProps> = (props) => {\n const { labels, onBack, status } = props\n\n if (status === 'not-found') {\n return (\n <BackgroundContainer>\n <DetailsHeader title={labels.headerTitle} onBack={onBack} />\n <NotFoundMessage>{labels.notFoundMessage}</NotFoundMessage>\n </BackgroundContainer>\n )\n }\n\n if (status === 'unavailable') {\n return (\n <BackgroundContainer>\n <DetailsHeader title={labels.headerTitle} onBack={onBack} />\n <NotFoundMessage>{labels.detailsUnavailableMessage}</NotFoundMessage>\n </BackgroundContainer>\n )\n }\n\n const {\n symbolIn, amountInFormatted, amountInUsd, tokenInLogoUrl, chainInName,\n symbolOut, amountOutFormatted, amountOutUsd, tokenOutLogoUrl, chainOutName,\n routeOrNetworkLabel, routeOrNetworkValue, statusLabel, txHash, dateFormatted, explorerUrl,\n } = props\n\n return (\n <BackgroundContainer>\n <DetailsHeader title={labels.headerTitle} onBack={onBack} />\n\n <ScrollableContent>\n <FlexCol gap='lg'>\n <SectionCard className='!p-[24px]'>\n <FlexCol gap='xs'>\n <TransactionTypeLabel>{labels.swapLabel}</TransactionTypeLabel>\n\n <FlexCol gap='sm'>\n <FlexRow gap='sm'>\n <TokenIcon src={tokenInLogoUrl} alt={symbolIn} />\n <FlexCol>\n <Amount>{amountInFormatted}</Amount>\n {amountInUsd\n ? (\n <AmountInUsd>{amountInUsd}</AmountInUsd>\n )\n : chainInName\n ? (\n <AmountInUsd>{chainInName}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n\n <FlexRow gap='sm'>\n <TokenIcon src={tokenOutLogoUrl} alt={symbolOut} />\n <FlexCol>\n <Amount>{amountOutFormatted}</Amount>\n {amountOutUsd\n ? (\n <AmountInUsd>{amountOutUsd}</AmountInUsd>\n )\n : chainOutName\n ? (\n <AmountInUsd>{chainOutName}</AmountInUsd>\n )\n : null}\n </FlexCol>\n </FlexRow>\n </FlexCol>\n </FlexCol>\n </SectionCard>\n\n <SectionCard className='!p-[var(--deframe-widget-size-padding-x-md)]'>\n <FlexCol gap='sm'>\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>\n {routeOrNetworkLabel}\n </InfoLabel>\n <InfoValue className='font-[var(--deframe-widget-font-family)]'>\n {routeOrNetworkValue}\n </InfoValue>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.sentLabel}</InfoLabel>\n <TwoLineValue primary={amountInFormatted} secondary={amountInUsd ?? '-'} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.receivedLabel}</InfoLabel>\n <TwoLineValue primary={amountOutFormatted} secondary={amountOutUsd ?? '-'} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.statusLabel}</InfoLabel>\n <SuccessBadge>{statusLabel}</SuccessBadge>\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.txIdLabel}</InfoLabel>\n <TransactionId hash={txHash} />\n </InfoRow>\n\n <InfoRow borderBottom>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.dateLabel}</InfoLabel>\n <InfoValue className='font-[var(--deframe-widget-font-family)]'>{dateFormatted}</InfoValue>\n </InfoRow>\n\n {explorerUrl && (\n <InfoRow>\n <InfoLabel className='font-[var(--deframe-widget-font-family)]'>{labels.transactionLabel}</InfoLabel>\n <ExplorerLink href={explorerUrl}>\n {labels.viewOnExplorerLabel}\n </ExplorerLink>\n </InfoRow>\n )}\n </FlexCol>\n </SectionCard>\n </FlexCol>\n </ScrollableContent>\n </BackgroundContainer>\n )\n}\n","import React from 'react'\nimport { PrimaryButton } from '../buttons'\nimport { TextBody, TextHeading } from '../texts'\n\nexport interface SwapWidgetFallbackViewProps {\n title: string\n description: string\n buttonLabel: string\n onButtonClick: () => void\n}\n\nexport const SwapWidgetFallbackView: React.FC<SwapWidgetFallbackViewProps> = ({\n title,\n description,\n buttonLabel,\n onButtonClick,\n}) => {\n return (\n <div\n data-testid='swap-widget-fallback'\n className='flex flex-col items-center justify-center h-full px-[var(--deframe-widget-size-padding-x-md)] text-center gap-[var(--deframe-widget-size-gap-md)]'\n >\n <TextHeading variant='h-large'>{title}</TextHeading>\n <TextBody className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {description}\n </TextBody>\n <PrimaryButton className='w-full' onClick={onButtonClick}>\n {buttonLabel}\n </PrimaryButton>\n </div>\n )\n}\n","import React from 'react'\n\nexport interface ApyRangeProps {\n children: React.ReactNode;\n}\n\nexport const ApyRange: React.FC<ApyRangeProps> = ({ children }) => {\n return (\n <div className='text-right justify-center text-text-highlight text-xs font-normal leading-4'>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport type LabelVariant = 'primary' | 'secondary'\n\nexport interface LabelProps {\n children: React.ReactNode\n variant?: LabelVariant\n className?: string\n}\n\nconst variantStyles: Record<LabelVariant, string> = {\n primary: 'text-text-primary dark:text-text-primary-dark text-text-md',\n secondary: 'text-text-secondary dark:text-text-secondary-dark text-text-sm font-poppins',\n}\n\nexport const Label: React.FC<LabelProps> = ({ children, variant = 'primary', className }) => {\n return (\n <div className={twMerge(variantStyles[variant], className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\n\nconst HistoryItemSkeleton: React.FC = () => (\n <div className='w-full bg-[var(--deframe-widget-color-bg-subtle)] rounded-xs min-h-[72px] flex items-center justify-between px-md py-sm'>\n <div className='flex items-center gap-sm flex-1 min-w-0'>\n <div className='w-10 h-10 rounded-xl bg-bg-muted dark:bg-bg-muted-dark animate-pulse flex-shrink-0' />\n <div className='flex flex-col gap-xs flex-1 min-w-0'>\n <div className='w-32 h-4 bg-bg-muted dark:bg-bg-muted-dark rounded animate-pulse' />\n <div className='w-24 h-3 bg-bg-muted dark:bg-bg-muted-dark rounded animate-pulse' />\n </div>\n </div>\n <div className='flex flex-col items-end gap-xs flex-shrink-0 ml-sm'>\n <div className='w-20 h-4 bg-bg-muted dark:bg-bg-muted-dark rounded animate-pulse' />\n <div className='w-16 h-3 bg-bg-muted dark:bg-bg-muted-dark rounded animate-pulse' />\n </div>\n </div>\n)\n\nconst HistoryGroupSkeleton: React.FC = () => (\n <div className='self-stretch flex flex-col gap-xs'>\n <div className='w-40 h-4 bg-bg-muted dark:bg-bg-muted-dark rounded animate-pulse' />\n <HistoryItemSkeleton />\n <HistoryItemSkeleton />\n </div>\n)\n\nexport const HistoryListSkeleton: React.FC = () => (\n <div className='self-stretch flex flex-col gap-md'>\n <HistoryGroupSkeleton />\n <HistoryGroupSkeleton />\n </div>\n)\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts/TextBody'\nimport { TextHeading } from '../texts/TextHeading'\n\ntype BackgroundVariant = 'subtle' | 'raised'\n\nexport interface WalletBalanceItem {\n label: string\n value: string\n badge?: React.ReactNode\n}\n\nexport interface WalletBalancesProps {\n cards: WalletBalanceItem[]\n variant?: BackgroundVariant\n className?: string\n}\n\nexport const WalletBalances: React.FC<WalletBalancesProps> = ({ cards, variant = 'subtle', className }) => {\n const bgClass = variant === 'raised' ? 'bg-[var(--deframe-widget-color-bg-raised)]' : 'bg-[var(--deframe-widget-color-bg-subtle)]'\n\n return (\n <div className={twMerge('w-full flex flex-row gap-4 mt-md', className)}>\n {cards.map((card) => (\n <div key={card.label} className={twMerge('flex-1 h-auto px-6 py-4 rounded shadow-sm flex flex-col items-start justify-start gap-xs', bgClass)}>\n <TextBody variant='text-small'>{card.label}</TextBody>\n {card.badge\n ? (\n <div className='flex w-full flex-col gap-xs md:flex-row md:items-end md:gap-[var(--deframe-widget-size-gap-md)]'>\n <TextHeading variant='h3'>{card.value}</TextHeading>\n <div className='md:pl-[var(--deframe-widget-size-padding-x-md)]'>{card.badge}</div>\n </div>\n )\n : (\n <TextHeading variant='h3'>{card.value}</TextHeading>\n )}\n </div>\n ))}\n </div>\n )\n}\n","import React from 'react'\nimport { PiClockCountdownBold } from 'react-icons/pi'\nimport { TextBody } from '../texts/TextBody'\nimport { TextHeading } from '../texts/TextHeading'\n\nexport interface HistoryTabEmptyProps {\n title: string\n description: string\n}\n\nexport const HistoryTabEmpty: React.FC<HistoryTabEmptyProps> = ({ title, description }) => (\n <div className='w-full h-[90vh] py-md bg-bg-default dark:bg-bg-default-dark rounded-lg flex flex-col justify-center items-center gap-sm overflow-hidden'>\n <div className='w-full flex flex-col justify-center items-center gap-md'>\n <div className='flex flex-col justify-center items-center gap-md text-center'>\n <div className='w-20 h-20 bg-bg-muted dark:bg-bg-muted-dark rounded-full flex justify-center items-center'>\n <PiClockCountdownBold className='w-10 h-10 text-text-tertiary dark:text-text-tertiary-dark' />\n </div>\n <TextHeading variant='h3'>{title}</TextHeading>\n </div>\n <div className='self-stretch text-center'>\n <TextBody variant='text-small'>{description}</TextBody>\n </div>\n </div>\n </div>\n)\n","import React from 'react'\nimport { TextBody } from '../texts/TextBody'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface StrategyGridCardProps {\n logoUrl: string\n title: string\n subtitle: string\n apyFormatted: string\n apyLabel: string\n onClick?: () => void\n className?: string\n}\n\nexport const StrategyGridCard: React.FC<StrategyGridCardProps> = ({\n logoUrl, title, subtitle, apyFormatted, apyLabel, onClick, className,\n}) => (\n <button\n type='button'\n onClick={onClick}\n data-test-id='strategy-grid-card'\n className={twMerge(\n 'flex flex-col gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-md)] rounded-[var(--deframe-widget-size-radius-sm)] h-[136px] min-h-[136px] flex-shrink-0',\n 'bg-[var(--deframe-widget-color-bg-raised)]',\n 'transition-colors cursor-pointer text-left w-full',\n className\n )}\n >\n <img src={logoUrl} alt={title} className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0' />\n <div className='flex items-end justify-between w-full'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody className='font-medium'>{title}</TextBody>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)]'>{subtitle}</TextBody>\n </div>\n <div className='flex flex-col items-end gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-primary-disabled)] text-right'>{apyLabel}</TextBody>\n <TextBody className='text-[color:var(--deframe-widget-color-brand-primary)]'>{apyFormatted}</TextBody>\n </div>\n </div>\n </button>\n)\n","import React from 'react'\nimport { HiArrowLeft } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface BackButtonProps {\n onClick?: () => void\n ariaLabel?: string\n className?: string\n}\n\nexport const BackButton: React.FC<BackButtonProps> = ({ onClick, ariaLabel = 'Back', className }) => {\n const baseClasses = 'w-12 h-12 rounded-[var(--deframe-widget-size-radius-full)] flex items-center justify-center text-[color:var(--deframe-widget-color-text-secondary)] hover:text-[color:var(--deframe-widget-color-brand-primary)] transition-colors cursor-pointer'\n\n return (\n <button\n data-test-id='back-button'\n onClick={onClick}\n className={twMerge(baseClasses, className)}\n aria-label={ariaLabel}\n >\n <HiArrowLeft className='w-6 h-6' />\n </button>\n )\n}\n","import React from 'react'\nimport { TextBody } from '../texts/TextBody'\nimport { TextHeading } from '../texts/TextHeading'\n\nexport interface EarnBalanceCardProps {\n tokenIcon?: React.ReactNode\n fiatBalance: string\n profitAmount: string\n tokenAmount: string\n investedLabel: string\n earningsLabel: string\n isFetching?: boolean\n}\n\nexport const EarnBalanceCard: React.FC<EarnBalanceCardProps> = ({\n tokenIcon, fiatBalance, profitAmount, tokenAmount, investedLabel, earningsLabel, isFetching = false,\n}) => {\n const displayedTokenAmount = isFetching ? '...' : tokenAmount\n\n return (\n <div className='w-full flex flex-row gap-[var(--deframe-widget-size-gap-md)]'>\n <div className='flex-1 h-24 px-[var(--deframe-widget-size-padding-x-lg)] bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)] rounded shadow-sm flex flex-col items-start justify-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody variant='text-small'>{investedLabel}</TextBody>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-xs)]'>\n {tokenIcon && (\n <div className='w-5 h-5'>\n {typeof tokenIcon === 'string'\n ? (\n <img src={tokenIcon} alt='Token' className='w-5 h-5 rounded-full' />\n )\n : (\n tokenIcon\n )}\n </div>\n )}\n <TextHeading variant='h3'>{displayedTokenAmount}</TextHeading>\n </div>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)]'>\n ~{fiatBalance}\n </TextBody>\n </div>\n <div className='flex-1 h-24 px-[var(--deframe-widget-size-padding-x-lg)] bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)] rounded shadow-sm flex flex-col items-start justify-center gap-[var(--deframe-widget-size-gap-xs)]'>\n <TextBody variant='text-small'>{earningsLabel}</TextBody>\n <TextHeading variant='h3'>{profitAmount}</TextHeading>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts/TextBody'\nimport { WalletBalances } from '../wallet-balances'\nimport { ProcessingBadge } from '../processing-badge'\n\nexport interface EarnInvestmentSummaryViewProps {\n overviewDescription: string\n totalInvestedLabel: string\n totalInvestedValue: string\n totalReturnLabel: string\n totalReturnValue: string\n processingBadgeLabel?: string\n processingBadgeTitle?: string\n className?: string\n}\n\n/**\n * Investment Summary view for desktop layout.\n * Pure view — displays total invested and total earned values.\n */\nexport const EarnInvestmentSummaryView: React.FC<EarnInvestmentSummaryViewProps> = ({\n overviewDescription,\n totalInvestedLabel,\n totalInvestedValue,\n totalReturnLabel,\n totalReturnValue,\n processingBadgeLabel,\n processingBadgeTitle,\n className,\n}) => {\n return (\n <section className={twMerge('flex flex-col gap-md p-lg bg-[var(--deframe-widget-color-bg-subtle)] rounded', className)}>\n <TextBody variant='text-small' className='text-text-secondary dark:text-text-secondary-dark'>\n {overviewDescription}\n </TextBody>\n\n <WalletBalances\n cards={[\n {\n label: totalInvestedLabel,\n value: totalInvestedValue,\n badge: processingBadgeLabel\n ? (\n <ProcessingBadge\n label={processingBadgeLabel}\n title={processingBadgeTitle}\n />\n )\n : undefined,\n },\n { label: totalReturnLabel, value: totalReturnValue },\n ]}\n variant='raised'\n className='grid grid-cols-2 gap-md !mt-0'\n />\n </section>\n )\n}\n\nexport default EarnInvestmentSummaryView\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts/TextBody'\n\nexport interface EarnInvestedSectionItem {\n strategyId: string\n logoUrl: string\n assetName: string\n subtitle: string\n balanceFormatted: string\n profitFormatted: string\n}\n\nexport interface EarnInvestedSectionViewProps {\n sectionTitle: string\n items: EarnInvestedSectionItem[]\n onItemClick?: (strategyId: string) => void\n className?: string\n}\n\n/**\n * Invested strategies section view for desktop layout.\n * Pure view — receives pre-formatted items and renders a vertical list.\n */\nexport const EarnInvestedSectionView: React.FC<EarnInvestedSectionViewProps> = ({\n sectionTitle,\n items,\n onItemClick,\n className,\n}) => {\n if (items.length === 0) {\n return null\n }\n\n return (\n <section\n className={twMerge(\n 'flex flex-col gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-lg)]',\n 'bg-[var(--deframe-widget-color-bg-subtle)] rounded-[var(--deframe-widget-size-radius-sm)]',\n className\n )}\n >\n {/* Section Title */}\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {sectionTitle}\n </TextBody>\n\n {/* List Items */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)]'>\n {items.map((item, index) => {\n const isLast = index === items.length - 1\n\n return (\n <button\n key={item.strategyId}\n type='button'\n onClick={() => onItemClick?.(item.strategyId)}\n className={twMerge(\n 'flex items-center gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-md)] bg-[var(--deframe-widget-color-bg-raised)] rounded-[var(--deframe-widget-size-radius-sm)]',\n 'transition-colors cursor-pointer text-left w-full',\n !isLast && 'border-b border-[var(--deframe-widget-color-border-secondary)]'\n )}\n >\n {/* Logo */}\n <img\n src={item.logoUrl}\n alt={item.assetName}\n className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0'\n />\n\n {/* Title + Subtitle */}\n <div className='flex flex-col flex-1 min-w-0'>\n <TextBody className='font-medium truncate'>\n {item.assetName}\n </TextBody>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)] truncate'>\n {item.subtitle}\n </TextBody>\n </div>\n\n {/* Values */}\n <div className='flex flex-col items-end flex-shrink-0'>\n <TextBody className='font-medium'>\n {item.balanceFormatted}\n </TextBody>\n <TextBody variant='text-small'>\n {item.profitFormatted}\n </TextBody>\n </div>\n </button>\n )\n })}\n </div>\n </section>\n )\n}\n\nexport default EarnInvestedSectionView\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { LoadingDots } from '../loading-dots'\nimport { SearchEmptyState } from '../search-empty-state'\nimport { TextBody } from '../texts/TextBody'\nimport { StrategyGridCard } from '../strategy-grid-card'\n\nexport interface EarnExploreGridItem {\n id: string\n logoUrl: string\n title: string\n subtitle: string\n apyFormatted: string\n apyLabel: string\n}\n\nexport interface EarnExploreGridViewProps {\n sectionTitle: string\n loadingLabel: string\n errorLabel: string\n emptySearchTitle: string\n emptySearchDescription: string\n isLoading: boolean\n error?: Error | null\n strategies: EarnExploreGridItem[]\n searchBar: React.ReactNode\n chipGroup: React.ReactNode\n hasFilters: boolean\n onStrategyClick?: (strategyId: string) => void\n className?: string\n}\n\n/**\n * Explore strategies grid view for desktop layout.\n * Pure view — receives filtered strategies and renders a grid with search/filter UI.\n */\nexport const EarnExploreGridView: React.FC<EarnExploreGridViewProps> = ({\n sectionTitle,\n loadingLabel,\n errorLabel,\n emptySearchTitle,\n emptySearchDescription,\n isLoading,\n error,\n strategies,\n searchBar,\n chipGroup,\n hasFilters,\n onStrategyClick,\n className,\n}) => {\n const showEmptyState = hasFilters && strategies.length === 0\n\n if (isLoading) {\n return (\n <section\n className={twMerge(\n 'flex flex-col gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-lg)]',\n 'bg-[var(--deframe-widget-color-bg-subtle)] rounded-[var(--deframe-widget-size-radius-sm)]',\n className\n )}\n >\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {sectionTitle}\n </TextBody>\n <div className='text-[color:var(--deframe-widget-color-text-secondary)] flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n {loadingLabel}\n <LoadingDots />\n </div>\n </section>\n )\n }\n\n if (error) {\n return (\n <section\n className={twMerge(\n 'flex flex-col gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-lg)]',\n 'bg-[var(--deframe-widget-color-bg-subtle)] rounded-[var(--deframe-widget-size-radius-sm)]',\n className\n )}\n >\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {sectionTitle}\n </TextBody>\n <div className='text-[color:var(--deframe-widget-color-state-error)]'>\n {errorLabel}\n </div>\n </section>\n )\n }\n\n return (\n <section\n className={twMerge(\n 'flex flex-col gap-[var(--deframe-widget-size-gap-md)] p-[var(--deframe-widget-size-padding-x-lg)]',\n 'bg-[var(--deframe-widget-color-bg-subtle)] rounded-[var(--deframe-widget-size-radius-sm)]',\n className\n )}\n >\n {/* Section Title */}\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {sectionTitle}\n </TextBody>\n\n {/* Search + Filters */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)]'>\n {searchBar}\n {chipGroup}\n </div>\n\n {/* Empty state */}\n {showEmptyState && (\n <div className='lg:h-[440px] flex items-center justify-center'>\n <SearchEmptyState title={emptySearchTitle} description={emptySearchDescription} />\n </div>\n )}\n\n {/* Grid with fixed height (2 rows of cards ~320px) and custom scrollbar */}\n {!showEmptyState && (\n <div\n className='explore-strategies-grid grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-[var(--deframe-widget-size-gap-md)] overflow-y-auto pr-[var(--deframe-widget-size-padding-x-sm)] h-[440px] auto-rows-[136px]'\n >\n {strategies.map((strategy) => (\n <StrategyGridCard\n key={strategy.id}\n logoUrl={strategy.logoUrl}\n title={strategy.title}\n subtitle={strategy.subtitle}\n apyFormatted={strategy.apyFormatted}\n apyLabel={strategy.apyLabel}\n onClick={() => onStrategyClick?.(strategy.id)}\n />\n ))}\n </div>\n )}\n </section>\n )\n}\n\nexport default EarnExploreGridView\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../texts/TextBody'\nimport { HistoryTabEmpty } from '../history-tab-empty'\nimport { HistoryListSkeleton } from '../history-list-skeleton'\n\nexport interface EarnRecentTransactionsViewProps {\n sectionTitle: string\n viewAllLabel: string\n isLoading: boolean\n hasMore: boolean\n hasItems: boolean\n historyList: React.ReactNode\n emptyTitle: string\n emptyDescription: string\n onViewAll?: () => void\n className?: string\n}\n\n/**\n * Recent transactions section view for desktop layout.\n * Pure view — renders a section with title, \"view all\" link, and history list slot.\n */\nexport const EarnRecentTransactionsView: React.FC<EarnRecentTransactionsViewProps> = ({\n sectionTitle,\n viewAllLabel,\n isLoading,\n hasMore,\n hasItems,\n historyList,\n emptyTitle,\n emptyDescription,\n onViewAll,\n className,\n}) => {\n return (\n <section\n className={twMerge(\n 'flex flex-col gap-md p-lg',\n 'bg-[var(--deframe-widget-color-bg-subtle)] rounded',\n className\n )}\n >\n <div className='flex items-center justify-between'>\n <TextBody variant='text-small' className='text-text-secondary dark:text-text-secondary-dark'>\n {sectionTitle}\n </TextBody>\n {hasMore && onViewAll && (\n <button\n type='button'\n onClick={onViewAll}\n className='text-brand-primary dark:text-brand-primary-dark hover:underline'\n >\n <TextBody variant='text-small'>{viewAllLabel}</TextBody>\n </button>\n )}\n </div>\n\n {isLoading\n ? (\n <HistoryListSkeleton />\n )\n : hasItems\n ? (\n historyList\n )\n : (\n <HistoryTabEmpty title={emptyTitle} description={emptyDescription} />\n )}\n </section>\n )\n}\n\nexport default EarnRecentTransactionsView\n","import React from 'react'\nimport { EarnInvestmentSummaryView, EarnInvestmentSummaryViewProps } from '../earn-investment-summary-view'\nimport { EarnInvestedSectionView, EarnInvestedSectionViewProps } from '../earn-invested-section-view'\nimport { EarnExploreGridView, EarnExploreGridViewProps } from '../earn-explore-grid-view'\nimport { EarnRecentTransactionsView, EarnRecentTransactionsViewProps } from '../earn-recent-transactions-view'\n\nexport interface EarnDesktopViewProps {\n isLoading: boolean\n loadingSkeleton?: React.ReactNode\n summary: EarnInvestmentSummaryViewProps\n invested: EarnInvestedSectionViewProps\n explore: EarnExploreGridViewProps\n transactions: EarnRecentTransactionsViewProps\n className?: string\n}\n\n/**\n * Desktop layout for Earn page.\n * Pure view — receives typed props per section and renders section views directly.\n */\nexport const EarnDesktopView: React.FC<EarnDesktopViewProps> = ({\n isLoading,\n loadingSkeleton,\n summary,\n invested,\n explore,\n transactions,\n}) => {\n if (isLoading) {\n if (loadingSkeleton) {\n return <>{loadingSkeleton}</>\n }\n return (\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)] w-full flex-1 min-h-0 animate-pulse px-[var(--deframe-widget-size-padding-x-lg)] py-[var(--deframe-widget-size-padding-y-lg)]'>\n <div className='h-24 rounded bg-[var(--deframe-widget-color-bg-secondary)]' />\n <div className='h-40 rounded bg-[var(--deframe-widget-color-bg-secondary)]' />\n <div className='h-60 rounded bg-[var(--deframe-widget-color-bg-secondary)]' />\n </div>\n )\n }\n\n return (\n <div className='text-[color:var(--deframe-widget-color-text-primary)] flex flex-col relative overflow-y-auto w-full flex-1 min-h-0 pb-[var(--deframe-widget-size-padding-y-lg)] gap-[var(--deframe-widget-size-gap-md)]'>\n {/* Summary Section */}\n <EarnInvestmentSummaryView {...summary} />\n\n {/* Onde voce ja investe */}\n <EarnInvestedSectionView {...invested} />\n\n {/* Explore as estrategias */}\n <EarnExploreGridView {...explore} />\n\n {/* Transacoes recentes */}\n <EarnRecentTransactionsView {...transactions} />\n </div>\n )\n}\n\nexport default EarnDesktopView\n","import React from 'react'\nimport { BackgroundContainer, Navbar } from '../layout'\nimport { PrimaryButton, TertiaryButton } from '../buttons'\nimport { SummaryDetails } from '../details'\nimport { TextBody } from '../texts/TextBody'\nimport { TextHeading } from '../texts/TextHeading'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { BackButton } from '../back-button'\nimport { EarnBalanceCard } from '../earn-balance-card'\nimport type { EarnInvestmentDetailsTransaction } from '../../types/earn-investment-details-transaction'\n\nexport type { EarnInvestmentDetailsTransaction }\n\ninterface EarnInvestmentDetailsLoadingProps {\n isLoading: true\n loadingSkeleton?: React.ReactNode\n}\n\ninterface EarnInvestmentDetailsContentProps {\n isLoading?: false\n loadingSkeleton?: never\n\n // Navigation\n title: string\n onBack?: () => void\n\n // Balance card\n tokenIcon?: string\n fiatBalance: string\n profitAmount: string\n tokenAmount: string\n investedLabel: string\n earningsLabel: string\n\n // Summary details\n summaryTitle: string\n summaryItems: Array<{ label: string; value: string }>\n\n // Past activities\n pastActivitiesTitle: string\n transactions: EarnInvestmentDetailsTransaction[]\n onTransactionClick: (transactionId: string) => void\n showMoreButton: boolean\n onLoadMore: () => void\n loadMoreLabel: string\n\n // Action buttons\n depositLabel: string\n onDeposit: () => void\n withdrawLabel: string\n onWithdraw: () => void\n}\n\nexport type EarnInvestmentDetailsViewProps =\n | EarnInvestmentDetailsLoadingProps\n | EarnInvestmentDetailsContentProps\n\nexport const EarnInvestmentDetailsView: React.FC<EarnInvestmentDetailsViewProps> = (props) => {\n if (props.isLoading) {\n return <BackgroundContainer>{props.loadingSkeleton}</BackgroundContainer>\n }\n\n const {\n title,\n onBack,\n tokenIcon,\n fiatBalance,\n profitAmount,\n tokenAmount,\n investedLabel,\n earningsLabel,\n summaryTitle,\n summaryItems,\n pastActivitiesTitle,\n transactions,\n onTransactionClick,\n showMoreButton,\n onLoadMore,\n loadMoreLabel,\n depositLabel,\n onDeposit,\n withdrawLabel,\n onWithdraw,\n } = props\n\n return (\n <BackgroundContainer>\n <Navbar>\n <BackButton onClick={onBack} />\n <TextHeading variant='h1'>{title}</TextHeading>\n </Navbar>\n\n <div className='flex-1 flex flex-col min-h-0 px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-sm)] gap-[var(--deframe-widget-size-gap-md)]'>\n <EarnBalanceCard\n tokenIcon={tokenIcon}\n fiatBalance={fiatBalance}\n profitAmount={profitAmount}\n tokenAmount={tokenAmount}\n investedLabel={investedLabel}\n earningsLabel={earningsLabel}\n />\n\n <SummaryDetails\n title={summaryTitle}\n items={summaryItems}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n />\n\n <div className='w-full rounded-[var(--deframe-widget-size-radius-sm)] flex flex-col gap-[var(--deframe-widget-size-gap-sm)] flex-shrink-0'>\n <TextHeading variant='h5'>{pastActivitiesTitle}</TextHeading>\n <div className='investment-activities-list flex flex-col gap-[var(--deframe-widget-size-gap-sm)] overflow-y-auto max-h-[280px] pr-[var(--deframe-widget-size-padding-x-sm)]'>\n {transactions.map((tx) => (\n <ListItem\n key={`tx-history-${tx.id}`}\n onClick={() => onTransactionClick(tx.id)}\n >\n <ListItemLeftSide>\n <img src={tokenIcon} alt='Token' className='w-10 h-10 rounded-[var(--deframe-widget-size-radius-full)]' />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{tx.action}</TextBody>\n <TextBody variant='text-small'>{tx.date}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <TextBody>{tx.usdAmount}</TextBody>\n <TextBody variant='text-small'>{tx.tokenAmount}</TextBody>\n </ListItemRightSide>\n </ListItem>\n ))}\n {showMoreButton && (\n <div className='flex justify-center items-center w-full py-4 flex-shrink-0'>\n <TertiaryButton onClick={onLoadMore}>\n {loadMoreLabel}\n </TertiaryButton>\n </div>\n )}\n </div>\n </div>\n </div>\n\n <div className='sticky bottom-0 left-0 right-0 border-t border-[var(--deframe-widget-color-border-secondary)] px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]'>\n <div className='flex justify-between gap-[var(--deframe-widget-size-gap-md)]'>\n <PrimaryButton onClick={onDeposit} className='w-full'>{depositLabel}</PrimaryButton>\n <PrimaryButton onClick={onWithdraw} className='w-full'>{withdrawLabel}</PrimaryButton>\n </div>\n </div>\n </BackgroundContainer>\n )\n}\n\nexport default EarnInvestmentDetailsView\n","import React from 'react'\nimport { MdArrowRight } from 'react-icons/md'\nimport { ApyRange } from '../apy-range'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { LoadingDots } from '../loading-dots'\nimport { TextBody } from '../texts/TextBody'\n\nconst GroupLabel: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <div className='text-text-secondary dark:text-text-secondary-dark text-sm font-medium font-poppins py-3'>\n {children}\n </div>\n)\n\nexport interface GroupedStrategyListItem {\n id: string\n logoUrl: string\n title: string\n subtitle: string\n onClick: () => void\n}\n\nexport interface GroupedInvestedItem extends GroupedStrategyListItem {\n balanceFormatted: string\n profitFormatted: string\n}\n\nexport interface GroupedStrategyItem extends GroupedStrategyListItem {\n apyFormatted: string\n}\n\nexport interface GroupedStrategyListViewProps {\n isLoading: boolean\n loadingLabel: string\n error: Error | null\n errorLabel: string\n\n investedLabel: string\n investedItems: GroupedInvestedItem[]\n\n bestPerformanceLabel: string\n bestPerformanceItems: GroupedStrategyItem[]\n\n allStrategiesLabel: string\n allStrategiesItems: GroupedStrategyItem[]\n}\n\n/**\n * Grouped strategy list view for mobile overview tab.\n * Pure view — receives pre-formatted items grouped by category.\n */\nexport const GroupedStrategyListView: React.FC<GroupedStrategyListViewProps> = ({\n isLoading,\n loadingLabel,\n error,\n errorLabel,\n investedLabel,\n investedItems,\n bestPerformanceLabel,\n bestPerformanceItems,\n allStrategiesLabel,\n allStrategiesItems,\n}) => {\n const hasInvested = investedItems.length > 0\n const hasBestPerformance = bestPerformanceItems.length > 0\n const hasAllStrategies = allStrategiesItems.length > 0\n\n if (isLoading) {\n return (\n <div className='flex items-center py-md'>\n {loadingLabel}{' '}<LoadingDots />\n </div>\n )\n }\n\n if (error) {\n return <div className='p-4 text-center text-red-500'>{errorLabel}: {error.message}</div>\n }\n\n return (\n <div className='w-full flex flex-col gap-sm flex-1 min-h-0 overflow-y-auto'>\n {/* Invested */}\n {hasInvested && (\n <>\n <GroupLabel>{investedLabel}</GroupLabel>\n <div className='flex flex-col gap-sm'>\n {investedItems.map((item) => (\n <ListItem\n key={`invested-${item.id}`}\n onClick={() => item.onClick()}\n >\n <ListItemLeftSide>\n <img\n src={item.logoUrl}\n alt={item.subtitle}\n className='w-10 h-10 rounded-full'\n />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{item.title}</TextBody>\n <TextBody variant='text-small'>{item.subtitle}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <div className='flex flex-row justify-between items-center'>\n <div className='flex flex-col items-end'>\n <TextBody>{item.balanceFormatted}</TextBody>\n <TextBody variant='text-small'>{item.profitFormatted}</TextBody>\n </div>\n <MdArrowRight className='w-6 h-6' />\n </div>\n </ListItemRightSide>\n </ListItem>\n ))}\n </div>\n </>\n )}\n\n {/* Best performance */}\n {hasBestPerformance && (\n <>\n <GroupLabel>{bestPerformanceLabel}</GroupLabel>\n <div className='flex flex-col gap-sm'>\n {bestPerformanceItems.map((item) => (\n <ListItem\n key={`best-${item.id}`}\n onClick={() => item.onClick()}\n >\n <ListItemLeftSide>\n <img\n src={item.logoUrl}\n alt={item.subtitle}\n className='w-10 h-10 rounded-full'\n />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{item.title}</TextBody>\n <TextBody variant='text-small'>{item.subtitle}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <div className='flex flex-row justify-between items-center'>\n <ApyRange>{item.apyFormatted}</ApyRange>\n <MdArrowRight className='w-6 h-6' />\n </div>\n </ListItemRightSide>\n </ListItem>\n ))}\n </div>\n </>\n )}\n\n {/* All strategies */}\n {hasAllStrategies && (\n <>\n <GroupLabel>{allStrategiesLabel}</GroupLabel>\n <div className='flex flex-col gap-sm'>\n {allStrategiesItems.map((item) => (\n <ListItem\n key={`all-${item.id}`}\n onClick={() => item.onClick()}\n >\n <ListItemLeftSide>\n <img\n src={item.logoUrl}\n alt={item.subtitle}\n className='w-10 h-10 rounded-full'\n />\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody>{item.title}</TextBody>\n <TextBody variant='text-small'>{item.subtitle}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <div className='flex flex-row justify-between items-center'>\n <ApyRange>{item.apyFormatted}</ApyRange>\n <MdArrowRight className='w-6 h-6' />\n </div>\n </ListItemRightSide>\n </ListItem>\n ))}\n </div>\n </>\n )}\n </div>\n )\n}\n\nexport default GroupedStrategyListView\n","import React from 'react'\n\nexport const DateLabel: React.FC<{ children: React.ReactNode }> = ({ children }) => {\n return (\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { MdArrowDownward, MdArrowUpward } from 'react-icons/md'\n\nexport const ArrowBadge: React.FC<{ isDeposit: boolean }> = ({ isDeposit }) => {\n return (\n <div className='absolute bottom-[-2px] right-[-2px] w-[15px] h-[15px] rounded-full bg-bg-subtle dark:bg-bg-subtle-dark flex items-center justify-center border border-bg-subtle dark:border-bg-subtle-dark'>\n {isDeposit\n ? (\n <MdArrowDownward className='w-3 h-3 text-text-primary dark:text-text-primary-dark' />\n )\n : (\n <MdArrowUpward className='w-3 h-3 text-text-primary dark:text-text-primary-dark' />\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { ArrowBadge } from './ArrowBadge'\n\nexport const TokenIconWithBadge: React.FC<{\n src: string\n alt: string\n isDeposit: boolean\n}> = ({ src, alt, isDeposit }) => {\n const fallbackText = encodeURIComponent((alt || 'TOK').slice(0, 3).toUpperCase())\n const fallbackSrc = `https://placehold.co/40x40?text=${fallbackText}`\n const resolvedSrc = src || fallbackSrc\n return (\n <div className='relative flex-shrink-0'>\n <div className='w-10 h-10 rounded-xl bg-bg-muted dark:bg-bg-muted-dark flex items-center justify-center overflow-hidden'>\n <img\n src={resolvedSrc}\n alt={alt}\n className='w-full h-full object-cover'\n onError={(e) => {\n (e.target as HTMLImageElement).src = fallbackSrc\n }}\n />\n </div>\n <ArrowBadge isDeposit={isDeposit} />\n </div>\n )\n}\n","import React from 'react'\nimport { MdArrowUpward } from 'react-icons/md'\n\nexport const SwapIconWithBadge: React.FC<{ src?: string; alt: string }> = ({ src, alt }) => {\n const fallbackText = encodeURIComponent((alt || 'TOK').slice(0, 3).toUpperCase())\n const fallbackSrc = `https://placehold.co/40x40?text=${fallbackText}`\n const resolvedSrc = src || fallbackSrc\n return (\n <div className='relative flex-shrink-0'>\n <div className='w-10 h-10 rounded-xl bg-bg-muted dark:bg-bg-muted-dark flex items-center justify-center overflow-hidden'>\n <img\n src={resolvedSrc}\n alt={alt}\n className='w-full h-full object-cover'\n onError={(e) => {\n (e.target as HTMLImageElement).src = fallbackSrc\n }}\n />\n </div>\n <div className='absolute bottom-[-2px] right-[-2px] w-[15px] h-[15px] rounded-full bg-bg-subtle dark:bg-bg-subtle-dark flex items-center justify-center border border-bg-subtle dark:border-bg-subtle-dark'>\n <MdArrowUpward className='w-3 h-3 text-text-primary dark:text-text-primary-dark' />\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { Label } from '../label'\n\nexport const AmountDisplay: React.FC<{ amount: string; usdAmount?: string }> = ({ amount, usdAmount }) => {\n return (\n <>\n <Label className='text-accent-sm-mobile whitespace-nowrap'>{amount}</Label>\n {usdAmount\n ? (\n <Label variant='secondary' className='whitespace-nowrap'>{usdAmount}</Label>\n )\n : null}\n </>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TertiaryButton } from '../buttons'\nimport { Label } from '../label'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { DateLabel } from './DateLabel'\nimport { TokenIconWithBadge } from './TokenIconWithBadge'\nimport { SwapIconWithBadge } from './SwapIconWithBadge'\nimport { AmountDisplay } from './AmountDisplay'\nimport { ProcessingBadge } from '../processing-badge'\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface HistoryListViewItem {\n id: string\n iconUrl: string\n iconAlt: string\n isDeposit: boolean\n isSwap: boolean\n title: string\n subtitle: string\n amountFormatted: string\n amountUsd?: string\n status?: 'SUCCESS' | 'PENDING' | 'FAILED' | 'REFUNDED'\n statusLabel?: string\n statusTitle?: string\n onClick: () => void\n}\n\nexport interface HistoryListViewGroup {\n dateLabel: string\n items: HistoryListViewItem[]\n}\n\nexport interface HistoryListViewProps {\n groups: HistoryListViewGroup[]\n showLoadMore: boolean\n onLoadMore: () => void\n loadMoreLabel: string\n itemClassName?: string\n itemVariant?: 'subtle' | 'raised'\n}\n\n// ============================================================================\n// View\n// ============================================================================\n\n/**\n * History list view.\n * Pure view — receives pre-grouped, pre-formatted history items.\n */\nexport const HistoryListView: React.FC<HistoryListViewProps> = ({\n groups,\n showLoadMore,\n onLoadMore,\n loadMoreLabel,\n itemClassName,\n}) => {\n if (groups.length === 0) {\n return null\n }\n\n return (\n <div className='self-stretch flex flex-col gap-[16px]'>\n {groups.map((group) => (\n <div key={group.dateLabel} className='self-stretch flex flex-col gap-sm'>\n <DateLabel>{group.dateLabel}</DateLabel>\n\n {group.items.map((item) => (\n <ListItem\n key={item.id}\n onClick={() => item.onClick()}\n containerClassName={twMerge('!rounded-xs !border-0 !min-h-[72px]', itemClassName)}\n >\n <ListItemLeftSide>\n {item.isSwap\n ? (\n <SwapIconWithBadge src={item.iconUrl} alt={item.iconAlt} />\n )\n : (\n <TokenIconWithBadge\n src={item.iconUrl}\n alt={item.iconAlt}\n isDeposit={item.isDeposit}\n />\n )}\n </ListItemLeftSide>\n\n <ListItemContent>\n <Label className='text-text-lg-mobile'>{item.title}</Label>\n <Label variant='secondary' className='text-text-tertiary dark:text-text-tertiary-dark'>\n {item.subtitle}\n </Label>\n {item.status === 'PENDING' && item.statusLabel\n ? (\n <div className='mt-[6px]'>\n <ProcessingBadge\n label={item.statusLabel}\n title={item.statusTitle}\n size='compact'\n />\n </div>\n )\n : null}\n </ListItemContent>\n\n <ListItemRightSide>\n <AmountDisplay amount={item.amountFormatted} usdAmount={item.amountUsd} />\n </ListItemRightSide>\n </ListItem>\n ))}\n </div>\n ))}\n\n {showLoadMore && (\n <div className='flex justify-center pt-sm'>\n <TertiaryButton onClick={onLoadMore}>\n {loadMoreLabel}\n </TertiaryButton>\n </div>\n )}\n </div>\n )\n}\n\nexport default HistoryListView\n","import React from 'react'\nimport { TextBody } from '../texts'\nimport { LoadingDots } from '../loading-dots'\nimport { HiChevronDown } from 'react-icons/hi2'\nimport type { ChainItem } from '../../types/chain-item'\n\nexport interface EarnTokenSelectorViewProps {\n selectedToken: { symbol: string; logoURI?: string | null } | null;\n onTokenClick: () => void;\n onNetworkClick?: (currentNetworkSelected?: ChainItem | null) => void;\n isLoading: boolean;\n selectTokenLabel: string;\n chainLabel: string;\n chainImage?: string;\n chainDirectionLabel: string; // \"Pagar em\" (deposit) or \"Receber em\" (withdraw)\n chainDisabledTitle?: string;\n isNetworkDisabled?: boolean;\n currentNetworkSelected?: ChainItem | null;\n}\n\nexport const EarnTokenSelectorView: React.FC<EarnTokenSelectorViewProps> = ({\n selectedToken,\n onTokenClick,\n onNetworkClick,\n isLoading,\n selectTokenLabel,\n chainLabel,\n chainImage,\n chainDirectionLabel,\n chainDisabledTitle,\n isNetworkDisabled = false,\n currentNetworkSelected,\n}) => (\n <div className='flex flex-col gap-[10px]'>\n {/* Token Selector */}\n <div className='flex gap-[10px] w-full'>\n <button\n type='button'\n onClick={onTokenClick}\n className='flex-1 h-[56px] border border-[var(--deframe-widget-color-border-primary)] rounded overflow-hidden hover:border-[var(--deframe-widget-color-border-primary)] transition-colors'\n >\n <div className='flex h-full items-center justify-between px-[var(--deframe-widget-size-padding-x-sm)] py-[6px]'>\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] items-center'>\n {selectedToken?.logoURI\n ? (\n <>\n <img\n src={selectedToken.logoURI}\n alt={selectedToken.symbol}\n className='w-6 h-6 rounded-full'\n />\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-primary)]'>\n {selectedToken.symbol}\n </TextBody>\n </>\n )\n : isLoading\n ? (\n <LoadingDots />\n )\n : (\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {selectTokenLabel}\n </TextBody>\n )}\n </div>\n <div className='w-[18px] h-[18px] flex items-center justify-center'>\n <HiChevronDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </div>\n </button>\n </div>\n\n {/* Chain Selector */}\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] items-center'>\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {chainDirectionLabel}\n </TextBody>\n <button\n type='button'\n onClick={() => onNetworkClick?.(currentNetworkSelected)}\n disabled={isNetworkDisabled}\n title={chainDisabledTitle}\n className={`bg-[var(--deframe-widget-color-bg-tertiary)] border border-[var(--deframe-widget-color-border-secondary)] rounded-lg flex gap-[var(--deframe-widget-size-gap-xs)] items-center px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] transition-colors ${\n isNetworkDisabled\n ? 'opacity-60 cursor-not-allowed'\n : 'cursor-pointer hover:border-[var(--deframe-widget-color-border-primary)]'\n }`}\n >\n {chainImage && <img src={chainImage} alt='' className='w-3 h-3 rounded-full' />}\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {chainLabel}\n </TextBody>\n <div className={`w-[18px] h-[18px] flex items-center justify-center ${isNetworkDisabled ? 'opacity-50' : ''}`}>\n <HiChevronDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </button>\n </div>\n </div>\n)\n","import React from 'react'\nimport { TextBody } from '../texts'\n\nexport interface EarnAmountInputViewProps {\n value: string;\n onChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n ariaLabel: string;\n dollarAmountFormatted: string;\n availableBalanceFormatted?: string; // \"Total disponível: 100.50\" — undefined for withdraw\n}\n\nexport const EarnAmountInputView: React.FC<EarnAmountInputViewProps> = ({\n value,\n onChange,\n ariaLabel,\n dollarAmountFormatted,\n availableBalanceFormatted,\n}) => {\n return (\n <div className='flex-1 flex flex-col items-end justify-between min-h-[86px] text-right'>\n {/* Amount Input */}\n <div className='flex flex-col items-end text-[color:var(--deframe-widget-color-text-secondary)]'>\n <input\n placeholder='0.00'\n type='text'\n inputMode='decimal'\n autoComplete='off'\n aria-label={ariaLabel}\n value={value}\n min='0'\n step='any'\n className='[font-size:var(--deframe-widget-font-size-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] bg-transparent outline-none text-right w-full min-w-[105px] placeholder:text-[color:var(--deframe-widget-color-text-primary-disabled)] [appearance:textfield] [&::-webkit-outer-spin-button]:appearance-none [&::-webkit-inner-spin-button]:appearance-none'\n onChange={onChange}\n onWheel={(event: React.WheelEvent<HTMLInputElement>) => {\n event.currentTarget.blur()\n }}\n />\n <TextBody as='span' variant='text-small'>\n {dollarAmountFormatted}\n </TextBody>\n </div>\n\n {/* Available Balance (deposit only) */}\n {availableBalanceFormatted && (\n <div className='[font-size:var(--deframe-widget-font-size-sm)] text-[color:var(--deframe-widget-color-text-tertiary)] whitespace-nowrap'>\n {availableBalanceFormatted}\n </div>\n )}\n </div>\n )\n}\n","import React from 'react'\nimport { PercentageButton } from '../buttons'\n\nexport interface EarnPercentageButtonsViewProps {\n onPercentageClick: (basisPoints: number) => void;\n maxLabel: string;\n}\n\nexport const EarnPercentageButtonsView: React.FC<EarnPercentageButtonsViewProps> = ({\n onPercentageClick,\n maxLabel,\n}) => (\n <div className='px-[var(--deframe-widget-size-padding-x-md)] mt-[var(--deframe-widget-size-gap-md)] w-full'>\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <PercentageButton onClick={() => onPercentageClick(2500)}>25%</PercentageButton>\n <PercentageButton onClick={() => onPercentageClick(5000)}>50%</PercentageButton>\n <PercentageButton onClick={() => onPercentageClick(7500)}>75%</PercentageButton>\n <PercentageButton onClick={() => onPercentageClick(10000)}>{maxLabel}</PercentageButton>\n </div>\n </div>\n)\n","import React from 'react'\nimport { TextBody } from '../texts'\nimport { MdArrowDropDown } from 'react-icons/md'\nimport type { ChainItem } from '../../types/chain-item'\n\nexport interface EarnWithdrawTokenSelectorViewProps {\n selectedToken: { symbol: string; logoURI?: string | null } | null;\n onTokenClick: () => void;\n onNetworkClick?: (currentNetworkSelected?: ChainItem | null) => void;\n selectTokenLabel: string;\n chainLabel: string;\n chainImage?: string;\n chainDirectionLabel: string;\n chainDisabledTitle?: string;\n isNetworkDisabled?: boolean;\n currentNetworkSelected?: ChainItem | null;\n}\n\nexport const EarnWithdrawTokenSelectorView: React.FC<EarnWithdrawTokenSelectorViewProps> = ({\n selectedToken,\n onTokenClick,\n onNetworkClick,\n selectTokenLabel,\n chainLabel,\n chainImage,\n chainDirectionLabel,\n chainDisabledTitle,\n isNetworkDisabled = false,\n currentNetworkSelected,\n}) => (\n <div className='flex flex-col gap-[10px]'>\n {/* Token Selector (what to receive) */}\n <div className='flex gap-[10px] w-full'>\n <button\n type='button'\n onClick={onTokenClick}\n className='flex-1 h-[56px] border border-[var(--deframe-widget-color-border-primary)] rounded overflow-hidden hover:border-[var(--deframe-widget-color-border-primary)] transition-colors'\n >\n <div className='flex h-full items-center justify-between px-[var(--deframe-widget-size-padding-x-sm)] py-[6px]'>\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] items-center'>\n {selectedToken?.symbol\n ? (\n <>\n {selectedToken.logoURI && (\n <img\n src={selectedToken.logoURI}\n alt={selectedToken.symbol}\n className='w-6 h-6 rounded-full'\n />\n )}\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-primary)]'>\n {selectedToken.symbol}\n </TextBody>\n </>\n )\n : (\n <TextBody as='span' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {selectTokenLabel}\n </TextBody>\n )}\n </div>\n <div className='w-[18px] h-[18px] flex items-center justify-center'>\n <MdArrowDropDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </div>\n </button>\n </div>\n\n {/* Receive on Chain Selector */}\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] items-center'>\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {chainDirectionLabel}\n </TextBody>\n <button\n type='button'\n onClick={() => onNetworkClick?.(currentNetworkSelected)}\n disabled={isNetworkDisabled}\n title={chainDisabledTitle}\n className={`bg-[var(--deframe-widget-color-bg-tertiary)] border border-[var(--deframe-widget-color-border-secondary)] rounded-lg flex gap-[var(--deframe-widget-size-gap-xs)] items-center px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] transition-colors ${\n isNetworkDisabled\n ? 'opacity-60 cursor-not-allowed'\n : 'cursor-pointer hover:border-[var(--deframe-widget-color-border-primary)]'\n }`}\n >\n {chainImage && <img src={chainImage} alt='' className='w-3 h-3 rounded-full' />}\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {chainLabel}\n </TextBody>\n <div className={`w-[18px] h-[18px] flex items-center justify-center ${isNetworkDisabled ? 'opacity-50' : ''}`}>\n <MdArrowDropDown className='w-3 h-3 text-[color:var(--deframe-widget-color-text-tertiary)]' />\n </div>\n </button>\n </div>\n </div>\n)\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { PrimaryButton } from '../buttons'\nimport { TextBody } from '../texts'\n\nexport interface EarnNoBalanceNotificationViewProps {\n prompt: string;\n actionLabel: string;\n onAction: () => void;\n}\n\nexport const EarnNoBalanceNotificationView: React.FC<EarnNoBalanceNotificationViewProps> = ({\n prompt,\n actionLabel,\n onAction,\n}) => (\n <div className='px-[var(--deframe-widget-size-padding-x-md)] mt-[var(--deframe-widget-size-gap-md)]'>\n <SectionCard className='bg-[var(--deframe-widget-color-state-warning)]/10 border border-[var(--deframe-widget-color-state-warning)]/20'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)]'>\n <div className='flex items-start gap-[var(--deframe-widget-size-gap-sm)]'>\n <svg className='w-5 h-5 text-[color:var(--deframe-widget-color-state-warning)] flex-shrink-0 mt-0.5' fill='currentColor' viewBox='0 0 20 20'>\n <path fillRule='evenodd' d='M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z' clipRule='evenodd' />\n </svg>\n <div className='flex-1'>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-primary)]'>\n {prompt}\n </TextBody>\n </div>\n </div>\n <PrimaryButton\n type='button'\n onClick={onAction}\n className='w-full mt-[var(--deframe-widget-size-gap-sm)]'\n >\n {actionLabel}\n </PrimaryButton>\n </div>\n </SectionCard>\n </div>\n)\n","import React from 'react'\nimport { SectionCard } from '../layout'\n\nexport interface EarnTxStatusCardViewProps {\n statusLabel: string;\n isProcessing: boolean;\n successMessage?: string;\n errorMessage?: string;\n}\n\nexport const EarnTxStatusCardView: React.FC<EarnTxStatusCardViewProps> = ({\n statusLabel,\n isProcessing,\n successMessage,\n errorMessage,\n}) => (\n <SectionCard>\n <div className='flex items-center justify-between'>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n {isProcessing && (\n <svg className='h-5 w-5 animate-spin text-[color:var(--deframe-widget-color-brand-primary)]' viewBox='0 0 24 24'>\n <circle className='opacity-25' cx='12' cy='12' r='10' stroke='currentColor' strokeWidth='4' fill='none' />\n <path className='opacity-75' fill='currentColor' d='M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z' />\n </svg>\n )}\n <div className='text-[color:var(--deframe-widget-color-text-secondary)] [font-size:var(--deframe-widget-font-size-sm)] font-[var(--deframe-widget-font-family)]'>\n {statusLabel}\n </div>\n </div>\n </div>\n\n {successMessage && (\n <div className='mt-[var(--deframe-widget-size-gap-sm)] rounded px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] bg-[var(--deframe-widget-color-state-success)]/10 text-[color:var(--deframe-widget-color-state-success)] [font-size:var(--deframe-widget-font-size-sm)] font-[var(--deframe-widget-font-family)]'>\n {successMessage}\n </div>\n )}\n\n {errorMessage && (\n <div className='mt-[var(--deframe-widget-size-gap-sm)] rounded px-[var(--deframe-widget-size-padding-x-sm)] py-[var(--deframe-widget-size-padding-y-xs)] bg-[var(--deframe-widget-color-state-error)]/10 text-[color:var(--deframe-widget-color-state-error)] [font-size:var(--deframe-widget-font-size-sm)] font-[var(--deframe-widget-font-family)]'>\n {errorMessage}\n </div>\n )}\n </SectionCard>\n)\n","import React from 'react'\n\nexport interface EarnBytecodeErrorViewProps {\n errorTitle: string;\n errorMessage: string;\n}\n\nexport const EarnBytecodeErrorView: React.FC<EarnBytecodeErrorViewProps> = ({\n errorTitle,\n errorMessage,\n}) => (\n <div className='rounded px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-sm)] bg-[var(--deframe-widget-color-state-error)]/10 border border-[var(--deframe-widget-color-state-error)]/20'>\n <div className='flex items-start gap-[var(--deframe-widget-size-gap-sm)]'>\n <svg className='w-5 h-5 text-[color:var(--deframe-widget-color-state-error)] flex-shrink-0' fill='currentColor' viewBox='0 0 20 20'>\n <path fillRule='evenodd' d='M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z' clipRule='evenodd' />\n </svg>\n <div className='flex-1'>\n <div className='text-[color:var(--deframe-widget-color-state-error)] [font-weight:var(--deframe-widget-font-weight-medium)] [font-size:var(--deframe-widget-font-size-sm)] font-[var(--deframe-widget-font-family)] mb-[var(--deframe-widget-size-gap-xs)]'>\n {errorTitle}\n </div>\n <div className='text-[color:var(--deframe-widget-color-text-primary)] [font-size:var(--deframe-widget-font-size-sm)] font-[var(--deframe-widget-font-family)]'>\n {errorMessage}\n </div>\n </div>\n </div>\n </div>\n)\n","import React from 'react'\nimport { SectionCard } from '../layout'\nimport { TextBody } from '../texts'\n\nexport interface EarnPositionCardViewProps {\n balanceUSD: string;\n balanceToken: string;\n icon?: string;\n iconAlt?: string;\n}\n\nexport const EarnPositionCardView: React.FC<EarnPositionCardViewProps> = ({\n balanceUSD,\n balanceToken,\n icon,\n iconAlt,\n}) => (\n <div className='px-[var(--deframe-widget-size-padding-x-md)]'>\n <SectionCard>\n <div className='flex items-center justify-start'>\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n {icon && (\n <img\n src={icon}\n alt={iconAlt}\n className='w-6 h-6 rounded-full'\n />\n )}\n <div className='flex flex-col'>\n <span className='[font-size:var(--deframe-widget-font-size-xxl)] [font-weight:var(--deframe-widget-font-weight-extrabold)] text-[color:var(--deframe-widget-color-text-secondary)]'>\n {balanceUSD}\n </span>\n <TextBody as='span' variant='text-small' className='text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {balanceToken}\n </TextBody>\n </div>\n </div>\n </div>\n </SectionCard>\n </div>\n)\n","import React from 'react'\nimport { BackgroundContainer, SectionCard } from '../layout'\nimport { DetailsHeader } from '../details-header'\nimport { ProgressIndicator } from '../progress'\nimport { TextHeading, TextBody } from '../texts'\nimport { InfoRow, InfoLabel, InfoValue } from '../info-display'\nimport { PrimaryButton } from '../buttons'\nimport { EarnTokenSelectorView } from '../earn-token-selector-view/EarnTokenSelectorView'\nimport { EarnAmountInputView } from '../earn-amount-input-view/EarnAmountInputView'\nimport { EarnPercentageButtonsView } from '../earn-percentage-buttons-view/EarnPercentageButtonsView'\nimport { EarnNoBalanceNotificationView } from '../earn-no-balance-notification-view/EarnNoBalanceNotificationView'\nimport { EarnTxStatusCardView } from '../earn-tx-status-card-view/EarnTxStatusCardView'\nimport { EarnBytecodeErrorView } from '../earn-bytecode-error-view/EarnBytecodeErrorView'\nimport type { ChainItem } from '../../types/chain-item'\n\n// ============================================================================\n// Props\n// ============================================================================\n\nexport interface EarnDepositFormViewProps {\n // Header / Layout\n headerTitle: string;\n onBack?: () => void;\n progress: number;\n pageTitle: string;\n subtitle: string;\n onSubmit: React.FormEventHandler<HTMLFormElement>;\n\n // Token selector\n selectedToken: { symbol: string; logoURI?: string | null } | null;\n onTokenClick: () => void;\n isLoadingToken: boolean;\n selectTokenLabel: string;\n\n // Chain selector\n chainLabel: string;\n chainImage?: string;\n chainDirectionLabel: string;\n chainDisabledTitle?: string;\n onNetworkClick?: (currentNetworkSelected?: ChainItem | null) => void;\n isNetworkDisabled?: boolean;\n currentNetworkSelected?: ChainItem | null;\n\n // Amount input\n amountValue: string;\n onAmountChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n amountAriaLabel: string;\n dollarAmountFormatted: string;\n availableBalanceFormatted: string;\n\n // No balance notification\n showNoBalanceNotification: boolean;\n noBalancePrompt: string;\n goToSwapLabel: string;\n onGoToSwap: () => void;\n\n // Percentage buttons\n onPercentageClick: (basisPoints: number) => void;\n maxLabel: string;\n\n // TX status (inline card)\n showTxStatus: boolean;\n txStatusLabel: string;\n isTxProcessing: boolean;\n isTxSuccess: boolean;\n isTxError: boolean;\n txSuccessMessage?: string;\n txErrorMessage?: string;\n\n // Bytecode error\n bytecodeErrorMessage?: string;\n transactionErrorLabel: string;\n\n // Quote details\n isQuoteValid: boolean;\n isFetchingQuote: boolean;\n quoteDetails: Array<{ label: string; value: string; borderBottom?: boolean }>;\n\n // Submit button\n submitDisabled: boolean;\n submitButtonText: string;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const EarnDepositFormView: React.FC<EarnDepositFormViewProps> = ({\n // Header / Layout\n headerTitle,\n onBack,\n progress,\n pageTitle,\n subtitle,\n onSubmit,\n\n // Token selector\n selectedToken,\n onTokenClick,\n isLoadingToken,\n selectTokenLabel,\n\n // Chain selector\n chainLabel,\n chainImage,\n chainDirectionLabel,\n chainDisabledTitle,\n onNetworkClick,\n isNetworkDisabled,\n currentNetworkSelected,\n\n // Amount input\n amountValue,\n onAmountChange,\n amountAriaLabel,\n dollarAmountFormatted,\n availableBalanceFormatted,\n\n // No balance notification\n showNoBalanceNotification,\n noBalancePrompt,\n goToSwapLabel,\n onGoToSwap,\n\n // Percentage buttons\n onPercentageClick,\n maxLabel,\n\n // TX status\n showTxStatus,\n txStatusLabel,\n isTxProcessing,\n isTxSuccess,\n isTxError,\n txSuccessMessage,\n txErrorMessage,\n\n // Bytecode error\n bytecodeErrorMessage,\n transactionErrorLabel,\n\n // Quote details\n isQuoteValid,\n isFetchingQuote,\n quoteDetails,\n\n // Submit button\n submitDisabled,\n submitButtonText,\n}) => (\n <BackgroundContainer>\n <DetailsHeader title={headerTitle} onBack={onBack} />\n\n <div className='flex-1 min-h-0 overflow-y-auto'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)] text-[color:var(--deframe-widget-color-text-secondary)] pb-[var(--deframe-widget-size-padding-y-md)]'>\n\n {/* Progress Indicator */}\n <div className='w-full px-[var(--deframe-widget-size-padding-x-md)]'>\n <ProgressIndicator progress={progress} />\n </div>\n\n {/* Strategy Title and Description */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)] px-[var(--deframe-widget-size-padding-x-md)]'>\n <TextHeading variant='h5'>{pageTitle}</TextHeading>\n <TextBody variant='text-small' className='text-[color:var(--deframe-widget-color-text-secondary)]'>\n {subtitle}\n </TextBody>\n </div>\n\n <form onSubmit={onSubmit}>\n {/* Amount Input Card */}\n <div className='px-[var(--deframe-widget-size-padding-x-md)]'>\n <SectionCard className='focus-within:bg-[var(--deframe-widget-color-bg-tertiary)] transition-colors'>\n <div className='flex items-center justify-between gap-[var(--deframe-widget-size-gap-md)]'>\n <EarnTokenSelectorView\n selectedToken={selectedToken}\n onTokenClick={onTokenClick}\n isLoading={isLoadingToken}\n selectTokenLabel={selectTokenLabel}\n chainLabel={chainLabel}\n chainImage={chainImage}\n chainDirectionLabel={chainDirectionLabel}\n chainDisabledTitle={chainDisabledTitle}\n onNetworkClick={onNetworkClick}\n isNetworkDisabled={isNetworkDisabled}\n currentNetworkSelected={currentNetworkSelected}\n />\n <EarnAmountInputView\n value={amountValue}\n onChange={onAmountChange}\n ariaLabel={amountAriaLabel}\n dollarAmountFormatted={dollarAmountFormatted}\n availableBalanceFormatted={availableBalanceFormatted}\n />\n </div>\n </SectionCard>\n </div>\n\n {/* No Balance Notification */}\n {showNoBalanceNotification && (\n <EarnNoBalanceNotificationView\n prompt={noBalancePrompt}\n actionLabel={goToSwapLabel}\n onAction={onGoToSwap}\n />\n )}\n\n {/* Percentage Buttons */}\n <EarnPercentageButtonsView\n onPercentageClick={onPercentageClick}\n maxLabel={maxLabel}\n />\n\n {/* Transaction Status & Quote Details */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)] px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-xl)] mt-[var(--deframe-widget-size-gap-md)]'>\n {/* Transaction Status Card */}\n {showTxStatus && (\n <EarnTxStatusCardView\n statusLabel={txStatusLabel}\n isProcessing={isTxProcessing}\n successMessage={isTxSuccess ? txSuccessMessage : undefined}\n errorMessage={isTxError ? txErrorMessage : undefined}\n />\n )}\n\n {/* Bytecode Error State */}\n {bytecodeErrorMessage && (\n <EarnBytecodeErrorView\n errorTitle={transactionErrorLabel}\n errorMessage={bytecodeErrorMessage}\n />\n )}\n\n {/* Quote Details Card */}\n {isQuoteValid && !isFetchingQuote && !bytecodeErrorMessage && (\n <SectionCard>\n {quoteDetails.map((detail, idx) => (\n <InfoRow key={`${detail.label}-${idx}`} borderBottom={detail.borderBottom}>\n <InfoLabel>{detail.label}</InfoLabel>\n <InfoValue>{detail.value}</InfoValue>\n </InfoRow>\n ))}\n </SectionCard>\n )}\n </div>\n\n {/* Deposit Submit Button */}\n <div className='pt-[var(--deframe-widget-size-padding-y-md)] px-[var(--deframe-widget-size-padding-x-md)] w-full'>\n <PrimaryButton\n type='submit'\n className='w-full text-[#252050]'\n disabled={submitDisabled}\n aria-disabled={submitDisabled}\n >\n {submitButtonText}\n </PrimaryButton>\n </div>\n </form>\n </div>\n </div>\n </BackgroundContainer>\n)\n","import React from 'react'\nimport { BackgroundContainer, SectionCard } from '../layout'\nimport { DetailsHeader } from '../details-header'\nimport { ProgressIndicator } from '../progress'\nimport { TextHeading, TextBody } from '../texts'\nimport { SummaryDetails } from '../details'\nimport { PrimaryButton } from '../buttons'\nimport { EarnAmountInputView } from '../earn-amount-input-view/EarnAmountInputView'\nimport { EarnWithdrawTokenSelectorView } from '../earn-withdraw-token-selector-view/EarnWithdrawTokenSelectorView'\nimport { EarnPercentageButtonsView } from '../earn-percentage-buttons-view/EarnPercentageButtonsView'\nimport { EarnPositionCardView } from '../earn-position-card-view/EarnPositionCardView'\nimport { EarnTxStatusCardView } from '../earn-tx-status-card-view/EarnTxStatusCardView'\nimport { EarnBytecodeErrorView } from '../earn-bytecode-error-view/EarnBytecodeErrorView'\nimport type { ChainItem } from '../../types/chain-item'\n\n// ============================================================================\n// Props\n// ============================================================================\n\nexport interface EarnWithdrawFormViewProps {\n // Header / Layout\n headerTitle: string;\n onBack?: () => void;\n progress: number;\n pageTitle: string;\n subtitle: string;\n onSubmit: React.FormEventHandler<HTMLFormElement>;\n\n // Current position card\n positionBalanceUSD: string;\n positionBalanceToken: string;\n strategyIcon?: string;\n strategyName?: string;\n\n // Token selector (what to receive)\n selectedToken: { symbol: string; logoURI?: string | null } | null;\n onTokenClick: () => void;\n selectTokenLabel: string;\n\n // Chain selector\n chainLabel: string;\n chainImage?: string;\n chainDirectionLabel: string;\n chainDisabledTitle?: string;\n onNetworkClick?: (currentNetworkSelected?: ChainItem | null) => void;\n isNetworkDisabled?: boolean;\n currentNetworkSelected?: ChainItem | null;\n\n // Amount input\n amountValue: string;\n onAmountChange: (e: React.ChangeEvent<HTMLInputElement>) => void;\n amountAriaLabel: string;\n dollarAmountFormatted: string;\n\n // Percentage buttons\n onPercentageClick: (basisPoints: number) => void;\n maxLabel: string;\n\n // TX status (inline card)\n showTxStatus: boolean;\n txStatusLabel: string;\n isTxProcessing: boolean;\n isTxSuccess: boolean;\n isTxError: boolean;\n txSuccessMessage?: string;\n txErrorMessage?: string;\n\n // Bytecode error\n bytecodeErrorMessage?: string;\n transactionErrorLabel: string;\n\n // Quote details (SummaryDetails)\n isQuoteValid: boolean;\n isFetchingQuote: boolean;\n summaryTitle: string;\n summaryItems: Array<{ label: string; value: string }>;\n\n // Submit button\n submitDisabled: boolean;\n submitButtonText: string;\n}\n\n// ============================================================================\n// Component\n// ============================================================================\n\nexport const EarnWithdrawFormView: React.FC<EarnWithdrawFormViewProps> = ({\n // Header / Layout\n headerTitle,\n onBack,\n progress,\n pageTitle,\n subtitle,\n onSubmit,\n\n // Position card\n positionBalanceUSD,\n positionBalanceToken,\n strategyIcon,\n strategyName,\n\n // Token selector\n selectedToken,\n onTokenClick,\n selectTokenLabel,\n\n // Chain selector\n chainLabel,\n chainImage,\n chainDirectionLabel,\n chainDisabledTitle,\n onNetworkClick,\n isNetworkDisabled,\n currentNetworkSelected,\n\n // Amount input\n amountValue,\n onAmountChange,\n amountAriaLabel,\n dollarAmountFormatted,\n\n // Percentage buttons\n onPercentageClick,\n maxLabel,\n\n // TX status\n showTxStatus,\n txStatusLabel,\n isTxProcessing,\n isTxSuccess,\n isTxError,\n txSuccessMessage,\n txErrorMessage,\n\n // Bytecode error\n bytecodeErrorMessage,\n transactionErrorLabel,\n\n // Quote details\n isQuoteValid,\n isFetchingQuote,\n summaryTitle,\n summaryItems,\n\n // Submit button\n submitDisabled,\n submitButtonText,\n}) => (\n <BackgroundContainer>\n <DetailsHeader title={headerTitle} onBack={onBack} />\n\n <div className='flex-1 min-h-0 overflow-y-auto'>\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)] text-[color:var(--deframe-widget-color-text-secondary)] pb-[var(--deframe-widget-size-padding-y-md)]'>\n\n {/* Progress Indicator */}\n <div className='w-full px-[var(--deframe-widget-size-padding-x-md)]'>\n <ProgressIndicator progress={progress} />\n </div>\n\n {/* Strategy Title and Description */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-sm)] px-[var(--deframe-widget-size-padding-x-md)]'>\n <TextHeading variant='h5'>{pageTitle}</TextHeading>\n <TextBody variant='text-small'>\n {subtitle}\n </TextBody>\n </div>\n\n <form onSubmit={onSubmit}>\n {/* User's Current Position Card */}\n <EarnPositionCardView\n balanceUSD={positionBalanceUSD}\n balanceToken={positionBalanceToken}\n icon={strategyIcon}\n iconAlt={strategyName}\n />\n\n {/* Withdrawal Amount Input Card */}\n <div className='px-[var(--deframe-widget-size-padding-x-md)] mt-[var(--deframe-widget-size-gap-sm)]'>\n <SectionCard className='focus-within:bg-[var(--deframe-widget-color-bg-tertiary)] transition-colors'>\n <div className='flex items-center justify-between gap-[var(--deframe-widget-size-gap-md)]'>\n <EarnWithdrawTokenSelectorView\n selectedToken={selectedToken}\n onTokenClick={onTokenClick}\n selectTokenLabel={selectTokenLabel}\n chainLabel={chainLabel}\n chainImage={chainImage}\n chainDirectionLabel={chainDirectionLabel}\n chainDisabledTitle={chainDisabledTitle}\n onNetworkClick={onNetworkClick}\n isNetworkDisabled={isNetworkDisabled}\n currentNetworkSelected={currentNetworkSelected}\n />\n <EarnAmountInputView\n value={amountValue}\n onChange={onAmountChange}\n ariaLabel={amountAriaLabel}\n dollarAmountFormatted={dollarAmountFormatted}\n />\n </div>\n </SectionCard>\n </div>\n\n {/* Percentage Buttons */}\n <EarnPercentageButtonsView\n onPercentageClick={onPercentageClick}\n maxLabel={maxLabel}\n />\n\n {/* Transaction Status & Quote Details */}\n <div className='flex flex-col gap-[var(--deframe-widget-size-gap-md)] px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-xl)] mt-[var(--deframe-widget-size-gap-md)]'>\n {/* Transaction Status Card */}\n {showTxStatus && (\n <EarnTxStatusCardView\n statusLabel={txStatusLabel}\n isProcessing={isTxProcessing}\n successMessage={isTxSuccess ? txSuccessMessage : undefined}\n errorMessage={isTxError ? txErrorMessage : undefined}\n />\n )}\n\n {/* Bytecode Error State */}\n {bytecodeErrorMessage && (\n <EarnBytecodeErrorView\n errorTitle={transactionErrorLabel}\n errorMessage={bytecodeErrorMessage}\n />\n )}\n\n {/* Details Card (Collapsible) */}\n {isQuoteValid && !isFetchingQuote && !bytecodeErrorMessage && (\n <SummaryDetails\n title={summaryTitle}\n items={summaryItems}\n defaultOpen={false}\n className='bg-[var(--deframe-widget-color-bg-secondary)]'\n />\n )}\n </div>\n\n {/* Withdraw Submit Button */}\n <div className='pt-[var(--deframe-widget-size-padding-y-md)] px-[var(--deframe-widget-size-padding-x-md)] w-full'>\n <PrimaryButton\n type='submit'\n className='w-full'\n disabled={submitDisabled}\n aria-disabled={submitDisabled}\n >\n {submitButtonText}\n </PrimaryButton>\n </div>\n </form>\n </div>\n </div>\n </BackgroundContainer>\n)\n","import React from 'react'\nimport { TransactionScreen, TransactionScreenInvestmentCard } from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnDepositProcessingViewProps {\n progress: number;\n title: string;\n descriptionPrefix: string;\n activityHistoryText: string;\n onGoToHistory: () => void;\n onBack: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnDepositProcessingView: React.FC<EarnDepositProcessingViewProps> = ({\n progress,\n title,\n descriptionPrefix,\n activityHistoryText,\n onGoToHistory,\n onBack,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='processing'\n title={title}\n description={\n <>\n {descriptionPrefix}{' '}\n <span\n className='[font-weight:var(--deframe-widget-font-weight-semibold)] underline underline-offset-2 cursor-pointer text-[color:var(--deframe-widget-color-brand-primary)]'\n onClick={onGoToHistory}\n >\n {activityHistoryText}\n </span>\n </>\n }\n onBack={onBack}\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { TransactionScreen, TransactionScreenInvestmentCard } from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnDepositSuccessViewProps {\n title: string;\n descriptionPrefix: string;\n formattedAmount: string;\n tokenSymbol: string;\n descriptionSuffix: string;\n descriptionLinkText: string;\n onClose: () => void;\n exploreMoreLabel: string;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnDepositSuccessView: React.FC<EarnDepositSuccessViewProps> = ({\n title,\n descriptionPrefix,\n formattedAmount,\n tokenSymbol,\n descriptionSuffix,\n descriptionLinkText,\n onClose,\n exploreMoreLabel,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={100}\n iconType='success'\n title={title}\n description={\n <>\n {descriptionPrefix}\n <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)]'> {formattedAmount} {tokenSymbol} </strong>\n {descriptionSuffix}{' '}\n <strong\n className='[font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-brand-primary)] cursor-pointer'\n onClick={onClose}\n >\n {descriptionLinkText}\n </strong>\n </>\n }\n onClose={onClose}\n actions={\n <PrimaryButton className='w-full' onClick={onClose}>\n {exploreMoreLabel}\n </PrimaryButton>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { TransactionScreen, TransactionScreenInvestmentCard } from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnDepositWarningViewProps {\n progress: number;\n title: string;\n description: string;\n backTitle: string;\n onBack: () => void;\n cancelLabel: string;\n onCancel: () => void;\n retryLabel: string;\n onRetry: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnDepositWarningView: React.FC<EarnDepositWarningViewProps> = ({\n progress,\n title,\n description,\n backTitle,\n onBack,\n cancelLabel,\n onCancel,\n retryLabel,\n onRetry,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='warning'\n title={title}\n description={description}\n onBack={onBack}\n backTitle={backTitle}\n actions={\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton className='flex-1' onClick={onCancel}>\n {cancelLabel}\n </SecondaryButton>\n <PrimaryButton className='flex-1' onClick={onRetry}>\n {retryLabel}\n </PrimaryButton>\n </div>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { TransactionScreen, TransactionScreenInvestmentCard } from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnDepositFailedViewProps {\n progress: number;\n title: string;\n description: string;\n backTitle: string;\n onBack: () => void;\n viewExplorerLabel: string;\n onViewExplorer: () => void;\n viewExplorerDisabled: boolean;\n retryLabel: string;\n onRetry: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n iconGradient: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnDepositFailedView: React.FC<EarnDepositFailedViewProps> = ({\n progress,\n title,\n description,\n backTitle,\n onBack,\n viewExplorerLabel,\n onViewExplorer,\n viewExplorerDisabled,\n retryLabel,\n onRetry,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n iconGradient,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='warning'\n iconGradient={iconGradient}\n title={title}\n description={description}\n onBack={onBack}\n backTitle={backTitle}\n actions={\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton className='flex-1' onClick={onViewExplorer} disabled={viewExplorerDisabled}>\n {viewExplorerLabel}\n </SecondaryButton>\n <PrimaryButton className='flex-1' onClick={onRetry}>\n {retryLabel}\n </PrimaryButton>\n </div>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport {\n TransactionScreen,\n TransactionScreenInvestmentCard,\n} from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnWithdrawProcessingViewProps {\n progress: number;\n title: string;\n descriptionPrefix: string;\n activityHistoryText: string;\n descriptionSuffix?: string;\n onGoToHistory: () => void;\n onBack: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnWithdrawProcessingView: React.FC<EarnWithdrawProcessingViewProps> = ({\n progress,\n title,\n descriptionPrefix,\n activityHistoryText,\n descriptionSuffix,\n onGoToHistory,\n onBack,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='processing'\n title={title}\n description={\n <>\n {descriptionPrefix}{' '}\n <span\n className='[font-weight:var(--deframe-widget-font-weight-semibold)] underline underline-offset-2 cursor-pointer text-[color:var(--deframe-widget-color-brand-primary)]'\n onClick={onGoToHistory}\n >\n {activityHistoryText}\n </span>{' '}\n {descriptionSuffix}\n </>\n }\n onBack={onBack}\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport {\n TransactionScreen,\n TransactionScreenInvestmentCard,\n} from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnWithdrawSuccessViewProps {\n title: string;\n descriptionPrefix: string;\n formattedAmount: string;\n tokenSymbol: string;\n descriptionSuffix: string;\n descriptionLinkText: string;\n onClose: () => void;\n exploreMoreLabel: string;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnWithdrawSuccessView: React.FC<EarnWithdrawSuccessViewProps> = ({\n title,\n descriptionPrefix,\n formattedAmount,\n tokenSymbol,\n descriptionSuffix,\n descriptionLinkText,\n onClose,\n exploreMoreLabel,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={100}\n iconType='success'\n title={title}\n description={\n <>\n {descriptionPrefix}\n <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)]'> {formattedAmount} {tokenSymbol} </strong>\n {descriptionSuffix}{' '}\n <strong className='[font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-brand-primary)]'>{descriptionLinkText}</strong>\n </>\n }\n onClose={onClose}\n actions={\n <PrimaryButton className='w-full' onClick={onClose}>\n {exploreMoreLabel}\n </PrimaryButton>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport {\n TransactionScreen,\n TransactionScreenInvestmentCard,\n} from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnWithdrawWarningViewProps {\n progress: number;\n title: string;\n description: string;\n backTitle: string;\n onBack: () => void;\n cancelLabel: string;\n onCancel: () => void;\n retryLabel: string;\n onRetry: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnWithdrawWarningView: React.FC<EarnWithdrawWarningViewProps> = ({\n progress,\n title,\n description,\n backTitle,\n onBack,\n cancelLabel,\n onCancel,\n retryLabel,\n onRetry,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='warning'\n title={title}\n description={description}\n onBack={onBack}\n backTitle={backTitle}\n actions={\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton className='flex-1' onClick={onCancel}>\n {cancelLabel}\n </SecondaryButton>\n <PrimaryButton className='flex-1' onClick={onRetry}>\n {retryLabel}\n </PrimaryButton>\n </div>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport {\n TransactionScreen,\n TransactionScreenInvestmentCard,\n} from '../transaction-screen'\nimport { TransactionProcessingDetails } from '../transaction-processing-details'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\nimport type { TransactionStep } from '../../types/transaction'\nimport type { TransactionProcessingDetailsLabels } from '../../types/transaction-processing-details-labels'\n\nexport interface EarnWithdrawFailedViewProps {\n progress: number;\n title: string;\n description: string;\n backTitle: string;\n onBack: () => void;\n viewExplorerLabel: string;\n onViewExplorer: () => void;\n viewExplorerDisabled: boolean;\n retryLabel: string;\n onRetry: () => void;\n strategyName: string;\n apyLabel: string;\n apyValue: string;\n iconSrc?: string;\n iconAlt: string;\n iconGradient: string;\n amountUSD: string;\n amountToken: string;\n transactionSteps: TransactionStep[];\n processingDetailsLabels: TransactionProcessingDetailsLabels;\n}\n\nexport const EarnWithdrawFailedView: React.FC<EarnWithdrawFailedViewProps> = ({\n progress,\n title,\n description,\n backTitle,\n onBack,\n viewExplorerLabel,\n onViewExplorer,\n viewExplorerDisabled,\n retryLabel,\n onRetry,\n strategyName,\n apyLabel,\n apyValue,\n iconSrc,\n iconAlt,\n iconGradient,\n amountUSD,\n amountToken,\n transactionSteps,\n processingDetailsLabels,\n}) => {\n return (\n <TransactionScreen\n progress={progress}\n iconType='warning'\n iconGradient={iconGradient}\n title={title}\n description={description}\n onBack={onBack}\n backTitle={backTitle}\n actions={\n <div className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full'>\n <SecondaryButton className='flex-1' onClick={onViewExplorer} disabled={viewExplorerDisabled}>\n {viewExplorerLabel}\n </SecondaryButton>\n <PrimaryButton className='flex-1' onClick={onRetry}>\n {retryLabel}\n </PrimaryButton>\n </div>\n }\n >\n <TransactionScreenInvestmentCard\n strategyName={strategyName}\n apyLabel={apyLabel}\n apyValue={apyValue}\n iconSrc={iconSrc}\n iconAlt={iconAlt}\n amountUSD={amountUSD}\n amountToken={amountToken}\n />\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-[var(--deframe-widget-color-bg-secondary)] lg:!bg-[var(--deframe-widget-color-bg-primary)]'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface DashboardCardProps {\n children: React.ReactNode\n className?: string\n}\n\nexport const DashboardCard: React.FC<DashboardCardProps> = ({ children, className }) => {\n return (\n <div data-test-id='dashboard-card' className={twMerge('bg-[var(--deframe-widget-color-bg-subtle)] rounded', className)}>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { TextBody } from '../texts/TextBody'\nimport { TextHeading } from '../texts/TextHeading'\nimport { PiClockCountdownBold } from 'react-icons/pi'\n\nexport const DashboardTransactionsPlaceholder: React.FC = () => {\n return (\n <div data-test-id='dashboard-transactions-placeholder' className='flex flex-col items-center justify-center py-16 gap-4'>\n <div className='w-20 h-20 bg-[var(--deframe-widget-color-bg-muted)] rounded-full flex justify-center items-center'>\n <PiClockCountdownBold className='w-10 h-10 text-[var(--deframe-widget-color-text-tertiary)]' />\n </div>\n <TextHeading variant='h3'>Nenhuma transação ainda</TextHeading>\n <TextBody variant='text-medium' className='text-center text-[var(--deframe-widget-color-text-secondary)]'>\n Assim que você começar a movimentar fundos, seu histórico de transações aparecerá aqui.\n </TextBody>\n </div>\n )\n}\n","import React from 'react'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport Text from '../texts/Text'\n\nexport interface DashboardBalancesBreakdownProps {\n isLoadingBalances: boolean\n formattedTokenPositions: string\n formattedEarnPositions: string\n layout?: 'vertical' | 'horizontal'\n}\n\nexport const DashboardBalancesBreakdown: React.FC<DashboardBalancesBreakdownProps> = ({\n isLoadingBalances,\n formattedTokenPositions,\n formattedEarnPositions,\n layout = 'vertical'\n}) => {\n if (layout === 'horizontal') {\n return (\n <div data-test-id='dashboard-balances-breakdown-horizontal' className='hidden lg:block w-full mt-8'>\n <div className='flex w-full gap-4 items-stretch'>\n <div className='flex-1 basis-0 min-w-0 bg-[var(--deframe-widget-color-bg-secondary)] rounded p-4 flex flex-col'>\n <Text>Cripto</Text>\n <AnimatePresence mode='wait'>\n {isLoadingBalances\n ? (\n <div key='skeleton-crypto' className='h-5 bg-[var(--deframe-widget-color-bg-muted)] rounded w-32 animate-pulse mt-2' />\n )\n : (\n <motion.div\n key='crypto-value'\n initial={{ opacity: 0, x: 10 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -10 }}\n transition={{ duration: 0.4, delay: 0.1, ease: 'easeOut' }}\n className='mt-2'\n >\n <Text>{formattedTokenPositions}</Text>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n <div className='flex-1 basis-0 min-w-0 bg-[var(--deframe-widget-color-bg-secondary)] rounded p-4 flex flex-col'>\n <Text>Investimentos</Text>\n <AnimatePresence mode='wait'>\n {isLoadingBalances\n ? (\n <div key='skeleton-earn' className='h-5 bg-[var(--deframe-widget-color-bg-muted)] rounded w-32 animate-pulse mt-2' />\n )\n : (\n <motion.div\n key='earn-value'\n initial={{ opacity: 0, x: 10 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -10 }}\n transition={{ duration: 0.4, delay: 0.2, ease: 'easeOut' }}\n className='mt-2'\n >\n <Text>{formattedEarnPositions}</Text>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n </div>\n )\n }\n\n return (\n <div data-test-id='dashboard-balances-breakdown-vertical' className='lg:hidden w-full mt-8'>\n <div className='flex justify-between items-center w-full mb-6'>\n <Text>Cripto</Text>\n <AnimatePresence mode='wait'>\n {isLoadingBalances\n ? (\n <div key='skeleton-crypto' className='h-5 bg-[var(--deframe-widget-color-bg-muted)] rounded w-32 animate-pulse' />\n )\n : (\n <motion.div\n key='crypto-value'\n initial={{ opacity: 0, x: 10 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -10 }}\n transition={{ duration: 0.4, delay: 0.1, ease: 'easeOut' }}\n >\n <Text>{formattedTokenPositions}</Text>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n <div className='flex justify-between items-center w-full'>\n <Text>Investimentos</Text>\n <AnimatePresence mode='wait'>\n {isLoadingBalances\n ? (\n <div key='skeleton-earn' className='h-5 bg-[var(--deframe-widget-color-bg-muted)] rounded w-32 animate-pulse' />\n )\n : (\n <motion.div\n key='earn-value'\n initial={{ opacity: 0, x: 10 }}\n animate={{ opacity: 1, x: 0 }}\n exit={{ opacity: 0, x: -10 }}\n transition={{ duration: 0.4, delay: 0.2, ease: 'easeOut' }}\n >\n <Text>{formattedEarnPositions}</Text>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n </div>\n )\n}\n","'use client'\n\nimport React, { useState } from 'react'\nimport { motion } from 'framer-motion'\nimport { DashboardCard } from '../dashboard-card'\nimport { TextHeading } from '../texts/TextHeading'\nimport { TextBody } from '../texts/TextBody'\nimport { ListItem, ListItemLeftSide, ListItemContent, ListItemRightSide } from '../lists'\nimport { Skeleton } from '../loading/Skeleton'\nimport PrimaryButton from '../buttons/primary-button/PrimaryButton'\nimport { Input } from '../inputs/Input'\nimport { LoadingDots } from '../loading-dots'\nimport { MdOutlineSearch, MdQrCodeScanner } from 'react-icons/md'\nimport type { DashboardTokenItem } from '../../types/dashboard-token-item'\n\nexport interface DashboardTokenListViewProps {\n tokens: DashboardTokenItem[]\n isLoading: boolean\n className?: string\n showCard?: boolean\n onDepositClick?: () => void\n}\n\nexport const DashboardTokenListView: React.FC<DashboardTokenListViewProps> = ({\n tokens,\n isLoading,\n className,\n showCard = true,\n onDepositClick,\n}) => {\n const [searchQuery, setSearchQuery] = useState('')\n\n const filteredTokens = tokens.filter((token) => {\n if (isNaN(token.amountInUSD) || token.amountInUSD < 0.01) return false\n if (!searchQuery) return true\n const query = searchQuery.toLowerCase()\n return (\n token.symbol.toLowerCase().includes(query) ||\n token.name.toLowerCase().includes(query)\n )\n })\n\n const content = (\n <div data-test-id='dashboard-token-list'>\n {showCard && <TextBody className='mb-6'>Seus tokens</TextBody>}\n\n {!isLoading && tokens.length > 0 && (\n <div data-test-id='dashboard-token-search' className={`${showCard ? 'mb-6' : 'mt-6 mb-6'} h-14 bg-[var(--deframe-widget-color-bg-raised)] flex items-center justify-center w-full border border-[var(--deframe-widget-color-border-default)] px-2 py-0.5 rounded gap-1`}>\n <div className='flex-1 flex items-center relative'>\n <Input\n data-test-id='dashboard-token-search-input'\n type='text'\n placeholder='Pesquisar aqui...'\n value={searchQuery}\n onChange={(e) => setSearchQuery(e.target.value)}\n className='w-full h-full p-4 pr-12'\n />\n <MdOutlineSearch className='w-4 h-4 text-[var(--deframe-widget-color-text-secondary)] absolute right-4' />\n </div>\n </div>\n )}\n <div>\n {isLoading\n ? (\n <div className='space-y-4'>\n {[1, 2, 3].map((i) => (\n <div key={i} className='flex items-center gap-3 p-2'>\n <Skeleton variant='circle' width='40px' height='40px' shimmer />\n <div className='flex-1'>\n <Skeleton width='80px' height='16px' shimmer className='mb-2' />\n <Skeleton width='128px' height='12px' shimmer />\n </div>\n <Skeleton width='64px' height='16px' shimmer />\n </div>\n ))}\n </div>\n )\n : filteredTokens.length > 0\n ? (\n filteredTokens.map((token, index: number) => (\n <motion.div\n key={token.id || index}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n duration: 0.4,\n delay: index * 0.1,\n ease: 'easeOut',\n }}\n >\n <ListItem\n data-test-id={`dashboard-token-item-${token.symbol.toLowerCase()}`}\n containerClassName={`p-2 ${index > 0 ? 'mt-4' : ''} bg-[var(--deframe-widget-color-bg-raised)] cursor-pointer`}\n >\n <ListItemLeftSide>\n <div className='relative w-10 h-10'>\n <img\n src={token.logoUrl}\n alt={token.name}\n className='w-10 h-10 rounded-full object-cover'\n />\n {token.networkLogoUrl && (\n <img\n src={token.networkLogoUrl}\n alt={token.networkName || ''}\n className='absolute -bottom-1 border border-bg-default p-px -right-1 w-6 h-6 rounded-full object-cover bg-white'\n />\n )}\n </div>\n </ListItemLeftSide>\n <ListItemContent className='ml-4'>\n <TextBody>{token.symbol}</TextBody>\n <TextBody variant='text-small' className='text-[var(--deframe-widget-color-text-secondary)]'>\n {token.name}\n </TextBody>\n </ListItemContent>\n <ListItemRightSide className='flex flex-col items-end'>\n {token.isUpdating\n ? (\n <LoadingDots />\n )\n : (\n <>\n <TextBody className='font-semibold'>\n {token.formattedFiatValue}\n </TextBody>\n <TextBody variant='text-small' className='text-[var(--deframe-widget-color-text-secondary)]'>\n {token.formattedAmount}{' '}\n {token.symbol}\n </TextBody>\n </>\n )}\n </ListItemRightSide>\n </ListItem>\n </motion.div>\n ))\n )\n : (\n <motion.div\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.4 }}\n className='flex flex-col items-center justify-center'\n >\n {searchQuery\n ? (\n <>\n <div className='w-20 h-20 rounded-full bg-[var(--deframe-widget-color-bg-muted)] flex items-center justify-center mb-4'>\n <MdOutlineSearch className='w-10 h-10 text-[var(--deframe-widget-color-text-secondary)]' />\n </div>\n <TextHeading className='text-center mb-4'>\n Nenhum token encontrado\n </TextHeading>\n <TextBody variant='text-large' className='text-center mb-4'>\n Tente buscar por outro nome ou símbolo.\n </TextBody>\n </>\n )\n : (\n <>\n <div className='w-20 h-20 rounded-full bg-[var(--deframe-widget-color-bg-muted)] flex items-center justify-center mb-4'>\n <MdQrCodeScanner className='w-10 h-10 text-[var(--deframe-widget-color-text-secondary)]' />\n </div>\n <TextHeading className='text-center mb-4'>\n Deposite e comece a usar a wallet\n </TextHeading>\n <TextBody variant='text-large' className='text-center mb-4'>\n Use Pix para adicionar saldo instantaneamente na sua carteira.\n </TextBody>\n {onDepositClick && (\n <button type='button' onClick={onDepositClick}>\n <PrimaryButton>\n Depositar via Pix\n </PrimaryButton>\n </button>\n )}\n </>\n )}\n </motion.div>\n )}\n </div>\n </div>\n )\n\n if (showCard) {\n return (\n <DashboardCard className={`p-6 bg-[var(--deframe-widget-color-bg-subtle)] ${className || ''}`}>\n {content}\n </DashboardCard>\n )\n }\n\n return <div className={className}>{content}</div>\n}\n","import React from 'react'\nimport { motion } from 'framer-motion'\nimport type { DashboardStrategyItem } from '../../types/dashboard-strategy-item'\nimport { TextBody } from '../texts/TextBody'\nimport { ListItem, ListItemLeftSide, ListItemContent, ListItemRightSide } from '../lists'\n\nexport interface DashboardStrategiesListViewProps {\n strategies: DashboardStrategyItem[]\n isLoading: boolean\n searchQuery?: string\n limit?: number\n onStrategyClick: (strategyId: string) => void\n}\n\nexport const DashboardStrategiesListView: React.FC<DashboardStrategiesListViewProps> = ({\n strategies,\n isLoading,\n searchQuery = '',\n limit = 5,\n onStrategyClick,\n}) => {\n if (isLoading) {\n return (\n <div data-test-id='dashboard-strategies-list-loading' className='space-y-4'>\n {Array.from({ length: limit }).map((_, i) => (\n <div key={i} className='flex items-center gap-3 p-2'>\n <div className='w-10 h-10 rounded-full bg-[var(--deframe-widget-color-bg-muted)] animate-pulse' />\n <div className='flex-1'>\n <div className='h-4 bg-[var(--deframe-widget-color-bg-muted)] rounded w-20 mb-2 animate-pulse' />\n <div className='h-3 bg-[var(--deframe-widget-color-bg-muted)] rounded w-32 animate-pulse' />\n </div>\n <div className='h-4 bg-[var(--deframe-widget-color-bg-muted)] rounded w-16 animate-pulse' />\n </div>\n ))}\n </div>\n )\n }\n\n const query = searchQuery.trim().toLowerCase()\n const filteredStrategies = strategies.filter((strategy) => {\n if (!query) return true\n return (\n strategy.assetName.toLowerCase().includes(query) ||\n strategy.protocol.toLowerCase().includes(query)\n )\n })\n\n const displayStrategies = filteredStrategies.slice(0, limit)\n\n if (displayStrategies.length === 0) {\n return (\n <motion.div\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{ duration: 0.4 }}\n className='flex flex-col items-center justify-center py-12'\n >\n <TextBody className='text-[var(--deframe-widget-color-text-secondary)]'>\n {searchQuery\n ? 'Nenhuma estratégia encontrada'\n : 'Nenhum investimento encontrado'}\n </TextBody>\n </motion.div>\n )\n }\n\n return (\n <div data-test-id='dashboard-strategies-list'>\n {displayStrategies.map((strategy, index: number) => (\n <motion.div\n key={strategy.id || index}\n initial={{ opacity: 0, y: 20 }}\n animate={{ opacity: 1, y: 0 }}\n transition={{\n duration: 0.4,\n delay: index * 0.1,\n ease: 'easeOut',\n }}\n >\n <ListItem\n containerClassName={`${index > 0 ? 'mt-4' : ''}`}\n onClick={() => onStrategyClick(strategy.id)}\n >\n <ListItemLeftSide>\n <img\n src={strategy.logoUrl}\n alt={strategy.assetName}\n className='w-10 h-10 rounded-full object-cover'\n />\n </ListItemLeftSide>\n <ListItemContent className='ml-4'>\n <TextBody>Rendimento {strategy.assetName}</TextBody>\n <TextBody variant='text-small' className='text-[var(--deframe-widget-color-text-secondary)]'>{strategy.protocol}</TextBody>\n </ListItemContent>\n <ListItemRightSide className='flex flex-col items-end'>\n <TextBody className='text-[var(--deframe-widget-color-text-secondary)]' />\n {strategy.apyFormatted !== undefined && (\n <TextBody variant='text-small' className='text-[var(--deframe-widget-color-brand-primary)]'>\n APY {strategy.apyFormatted}\n </TextBody>\n )}\n </ListItemRightSide>\n </ListItem>\n </motion.div>\n ))}\n </div>\n )\n}\n","import React from 'react'\nimport { DashboardCard } from '../dashboard-card'\nimport { DashboardBalancesBreakdown } from '../dashboard-balances-breakdown'\nimport PrimaryButton from '../buttons/primary-button/PrimaryButton'\nimport { TextBody } from '../texts/TextBody'\nimport { AnimatePresence, motion } from 'framer-motion'\nimport Link from 'next/link'\nimport {\n MdOutlineArrowDownward,\n MdOutlineArrowUpward,\n MdOutlineSwapHoriz,\n} from 'react-icons/md'\n\nexport interface DashboardPortfolioViewProps {\n formattedTotalValue: string\n isLoading: boolean\n onDepositClick: () => void\n onWithdrawClick: () => void\n onSwapClick: () => void\n formattedTokenPositions: string\n formattedEarnPositions: string\n}\n\nexport const DashboardPortfolioView: React.FC<DashboardPortfolioViewProps> = ({\n formattedTotalValue,\n isLoading,\n onDepositClick,\n onWithdrawClick,\n onSwapClick,\n formattedTokenPositions,\n formattedEarnPositions,\n}) => {\n return (\n <DashboardCard className='p-6 bg-[var(--deframe-widget-color-bg-subtle)]'>\n <div className='flex flex-col w-full h-full'>\n <TextBody className='mb-6'>Portfólio</TextBody>\n\n <div className='flex items-center gap-2 mb-2'>\n <AnimatePresence mode='wait'>\n {isLoading\n ? (\n <div key='skeleton' className='h-8 bg-[var(--deframe-widget-color-bg-muted)] rounded w-64 animate-pulse' />\n )\n : (\n <motion.p\n key='value'\n initial={{ opacity: 0, y: 10 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -10 }}\n transition={{ duration: 0.5, ease: 'easeOut' }}\n className='text-2xl font-bold text-[var(--deframe-widget-color-text-primary)] flex items-center gap-2'\n >\n {formattedTotalValue}\n </motion.p>\n )}\n </AnimatePresence>\n </div>\n\n <div className='flex lg:hidden flex-row gap-2 sm:gap-4 mt-6 w-full'>\n <Link data-testid='dashboard-quick-action-deposit-mobile' href='/dashboard/deposit' className='flex-1 min-w-0 cursor-pointer' onClick={onDepositClick}>\n <PrimaryButton>\n <MdOutlineArrowUpward className='w-4 h-4 shrink-0' />\n Depositar\n </PrimaryButton>\n </Link>\n <Link data-testid='dashboard-quick-action-withdraw-mobile' href='/dashboard/withdraw' className='flex-1 min-w-0 cursor-pointer' onClick={onWithdrawClick}>\n <PrimaryButton>\n <MdOutlineArrowDownward className='w-4 h-4 shrink-0' />\n Sacar\n </PrimaryButton>\n </Link>\n <Link data-testid='dashboard-quick-action-swap-mobile' href='/dashboard/swap' className='flex-1 min-w-0 cursor-pointer' onClick={onSwapClick}>\n <PrimaryButton>\n <MdOutlineSwapHoriz className='w-4 h-4 shrink-0' />\n Trocar\n </PrimaryButton>\n </Link>\n </div>\n\n <div className='lg:hidden'>\n <DashboardBalancesBreakdown\n isLoadingBalances={isLoading}\n formattedTokenPositions={formattedTokenPositions}\n formattedEarnPositions={formattedEarnPositions}\n layout='vertical'\n />\n </div>\n <div className='hidden lg:block'>\n <DashboardBalancesBreakdown\n isLoadingBalances={isLoading}\n formattedTokenPositions={formattedTokenPositions}\n formattedEarnPositions={formattedEarnPositions}\n layout='horizontal'\n />\n </div>\n </div>\n </DashboardCard>\n )\n}\n","import React from 'react'\nimport { DashboardCard } from '../dashboard-card'\nimport type { DashboardTokenItem } from '../../types/dashboard-token-item'\nimport { DashboardTokenListView } from '../dashboard-token-list-view'\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from '../tabs/Tabs'\nimport { TextBody } from '../texts/TextBody'\n\nexport interface DashboardTokensViewProps {\n sortedRegularTokens: DashboardTokenItem[]\n regularTokens: DashboardTokenItem[]\n isLoadingBalances: boolean\n activeTab: 'strategies' | 'tokens'\n onTabChange: (tab: 'strategies' | 'tokens') => void\n strategiesContent: React.ReactNode\n}\n\nexport const DashboardTokensView: React.FC<DashboardTokensViewProps> = ({\n sortedRegularTokens,\n regularTokens,\n isLoadingBalances,\n activeTab,\n onTabChange,\n strategiesContent,\n}) => {\n return (\n <>\n <DashboardTokenListView tokens={sortedRegularTokens} isLoading={isLoadingBalances} className='hidden lg:block' />\n\n <DashboardCard className='lg:hidden p-6 bg-[var(--deframe-widget-color-bg-subtle)]'>\n <Tabs\n value={activeTab}\n onValueChange={(value) => onTabChange(value as 'strategies' | 'tokens')}\n >\n <TabsList className='w-full mb-3 flex justify-center'>\n <TabsTrigger value='tokens'>\n Cripto\n </TabsTrigger>\n <TabsTrigger value='strategies'>\n Investimentos\n </TabsTrigger>\n </TabsList>\n\n <TabsContent value='tokens'>\n <TextBody className='mb-6'>Seus tokens</TextBody>\n <DashboardTokenListView tokens={regularTokens} isLoading={isLoadingBalances} showCard={false} />\n </TabsContent>\n\n <TabsContent value='strategies'>\n {strategiesContent}\n </TabsContent>\n </Tabs>\n </DashboardCard>\n </>\n )\n}\n","import React from 'react'\nimport type { ComponentType } from 'react'\nimport { DashboardCard } from '../dashboard-card'\nimport { DashboardTransactionsPlaceholder } from '../dashboard-transactions-placeholder'\nimport { ListItem, ListItemLeftSide, ListItemContent, ListItemRightSide } from '../lists'\nimport { Skeleton } from '../loading/Skeleton'\nimport { TextBody } from '../texts/TextBody'\nimport Link from 'next/link'\n\ntype TransactionIcon = ComponentType<{ size?: number; className?: string }>\n\nexport interface DashboardTransactionItemViewData {\n id: string\n mainIcon: TransactionIcon\n typeIcon: TransactionIcon\n iconColor: string\n iconBgColor: string\n formattedDate: string\n label: string\n rightPrimary: string\n rightSecondary: string\n onClick: () => void\n}\n\nexport interface DashboardRecentTransactionsViewProps {\n isLoading: boolean\n isEmpty: boolean\n transactions: DashboardTransactionItemViewData[]\n onViewAllClick: () => void\n}\n\nexport const DashboardRecentTransactionsView: React.FC<DashboardRecentTransactionsViewProps> = ({\n isLoading,\n isEmpty,\n transactions,\n onViewAllClick,\n}) => {\n return (\n <DashboardCard className='p-6 bg-[var(--deframe-widget-color-bg-subtle)]'>\n <div className='flex flex-col'>\n <div className='flex justify-between items-start'>\n <TextBody className='mb-6'>Transações recentes</TextBody>\n <Link href='/dashboard/history' onClick={onViewAllClick}>\n <TextBody className='text-[var(--deframe-widget-color-brand-primary)] cursor-pointer hover:underline'>\n Ver todas\n </TextBody>\n </Link>\n </div>\n\n <div className='space-y-2 mt-[-16px]'>\n {isLoading\n ? (\n <div className='space-y-4'>\n {[1, 2, 3].map((i) => (\n <div key={i} className='flex items-center gap-3 p-2'>\n <Skeleton variant='circle' width='40px' height='40px' shimmer />\n <div className='flex-1'>\n <Skeleton width='160px' height='14px' shimmer className='mb-2' />\n <Skeleton width='220px' height='12px' shimmer />\n </div>\n <Skeleton width='96px' height='14px' shimmer />\n </div>\n ))}\n </div>\n )\n : isEmpty\n ? (\n <DashboardTransactionsPlaceholder />\n )\n : transactions.map((item) => {\n const MainIcon = item.mainIcon\n const TypeIcon = item.typeIcon\n\n return (\n <ListItem\n key={item.id}\n containerClassName='p-2 mt-4 bg-[var(--deframe-widget-color-bg-secondary)] cursor-pointer'\n onClick={() => item.onClick()}\n >\n <ListItemLeftSide>\n <div className='relative'>\n <div className={`w-10 h-10 rounded-full ${item.iconBgColor} flex items-center justify-center`}>\n <MainIcon className={`${item.iconColor}`} size={20} />\n </div>\n <div className='absolute -bottom-1 -right-1 w-5 h-5 rounded-full bg-[var(--deframe-widget-color-bg-secondary)] flex items-center justify-center border border-[var(--deframe-widget-color-border-secondary)]'>\n <TypeIcon className={`${item.iconColor}`} size={12} />\n </div>\n </div>\n </ListItemLeftSide>\n\n <ListItemContent className='ml-4'>\n <TextBody variant='text-small'>{item.formattedDate}</TextBody>\n <TextBody className='text-xs text-[var(--deframe-widget-color-text-secondary)]'>\n {item.label}\n </TextBody>\n </ListItemContent>\n\n <ListItemRightSide className='text-right'>\n <TextBody variant='text-small'>\n {item.rightPrimary}\n </TextBody>\n <TextBody className='text-xs text-[var(--deframe-widget-color-text-secondary)]'>\n {item.rightSecondary}\n </TextBody>\n </ListItemRightSide>\n </ListItem>\n )\n })}\n </div>\n </div>\n </DashboardCard>\n )\n}\n","import React from 'react'\nimport { DashboardCard } from '../dashboard-card'\nimport SecondaryButton from '../buttons/secondary-button/SecondaryButton'\nimport { Skeleton } from '../loading/Skeleton'\nimport { TextBody } from '../texts/TextBody'\nimport Link from 'next/link'\n\nexport interface DashboardInvestmentOpportunitiesViewProps {\n isLoadingBalances: boolean\n formattedTotalProfit: string\n strategiesContent: React.ReactNode\n onViewAllStrategiesClick: () => void\n}\n\nexport const DashboardInvestmentOpportunitiesView: React.FC<DashboardInvestmentOpportunitiesViewProps> = ({\n isLoadingBalances,\n formattedTotalProfit,\n strategiesContent,\n onViewAllStrategiesClick,\n}) => {\n return (\n <DashboardCard className='hidden lg:block p-6'>\n <div className='flex flex-col space-y-4'>\n <TextBody variant='text-large'>Oportunidades de investimento</TextBody>\n\n <DashboardCard className='bg-[var(--deframe-widget-color-bg-secondary)] flex flex-col space-y-2 p-4'>\n <TextBody>Rendimentos</TextBody>\n {isLoadingBalances\n ? (\n <div className='flex items-baseline gap-2'>\n <Skeleton width='80px' height='24px' shimmer />\n </div>\n )\n : (\n <div className='flex items-baseline gap-2'>\n <TextBody variant='text-large'>\n {formattedTotalProfit}\n </TextBody>\n </div>\n )}\n </DashboardCard>\n\n <div className='flex flex-col'>\n {strategiesContent}\n </div>\n\n <Link href='/dashboard/earn' className='w-full' onClick={onViewAllStrategiesClick}>\n <SecondaryButton>\n Ver todas as estratégias\n </SecondaryButton>\n </Link>\n </div>\n </DashboardCard>\n )\n}\n","import React from 'react'\nimport { DashboardCard } from '../dashboard-card'\nimport PrimaryButton from '../buttons/primary-button/PrimaryButton'\nimport { TextBody } from '../texts/TextBody'\nimport Link from 'next/link'\nimport {\n MdOutlineArrowDownward,\n MdOutlineArrowUpward,\n MdOutlineSwapHoriz,\n} from 'react-icons/md'\nimport { DashboardPortfolioView, type DashboardPortfolioViewProps } from '../dashboard-portfolio-view'\nimport { DashboardTokensView, type DashboardTokensViewProps } from '../dashboard-tokens-view'\nimport { DashboardRecentTransactionsView, type DashboardRecentTransactionsViewProps } from '../dashboard-recent-transactions-view'\nimport { DashboardInvestmentOpportunitiesView, type DashboardInvestmentOpportunitiesViewProps } from '../dashboard-investment-opportunities-view'\n\nexport interface DashboardViewProps {\n portfolio: DashboardPortfolioViewProps\n tokens: DashboardTokensViewProps\n recentTransactions: DashboardRecentTransactionsViewProps\n investmentOpportunities: DashboardInvestmentOpportunitiesViewProps\n quickActions: {\n onDepositClick: () => void\n onWithdrawClick: () => void\n onSwapClick: () => void\n }\n banner: {\n imageUrl: string\n altText: string\n }\n}\n\nexport const DashboardView: React.FC<DashboardViewProps> = ({\n portfolio,\n tokens,\n recentTransactions,\n investmentOpportunities,\n quickActions,\n banner,\n}) => {\n return (\n <div data-test-id='dashboard-page' className='w-full relative overflow-hidden mx-auto rounded p-6 lg:p-12'>\n <div className='grid grid-cols-1 md:grid-cols-3 gap-6 max-w-[1400px] mx-auto'>\n <div className='lg:col-span-2 space-y-6'>\n <DashboardPortfolioView {...portfolio} />\n\n <DashboardCard data-testid='dashboard-quick-actions-card' className='hidden lg:block p-6'>\n <div className='flex flex-col space-y-3'>\n <TextBody className='mb-6'>Ações rápidas</TextBody>\n <div className='flex flex-row gap-4 w-full'>\n <Link data-testid='dashboard-quick-action-deposit' href='/dashboard/deposit' className='flex-1 min-w-0 cursor-pointer' onClick={() => quickActions.onDepositClick()}>\n <PrimaryButton>\n <MdOutlineArrowUpward className='w-4 h-4 shrink-0' />\n Depositar\n </PrimaryButton>\n </Link>\n <Link data-testid='dashboard-quick-action-withdraw' href='/dashboard/withdraw' className='flex-1 min-w-0 cursor-pointer' onClick={() => quickActions.onWithdrawClick()}>\n <PrimaryButton>\n <MdOutlineArrowDownward className='w-4 h-4 shrink-0' />\n Sacar\n </PrimaryButton>\n </Link>\n <Link data-testid='dashboard-quick-action-swap' href='/dashboard/swap' className='flex-1 min-w-0 cursor-pointer' onClick={() => quickActions.onSwapClick()}>\n <PrimaryButton>\n <MdOutlineSwapHoriz className='w-4 h-4 shrink-0' />\n Trocar\n </PrimaryButton>\n </Link>\n </div>\n </div>\n </DashboardCard>\n\n <div className='w-full bg-[#002608] rounded shadow-[0px_1px_3px_0px_rgba(0,0,0,0.1)] flex items-center justify-between cursor-pointer'>\n <img\n src={banner.imageUrl}\n alt={banner.altText}\n className='w-full h-[90%] object-cover rounded'\n />\n </div>\n\n <DashboardTokensView {...tokens} />\n\n <DashboardRecentTransactionsView {...recentTransactions} />\n </div>\n\n <div className='lg:col-span-1 space-y-6'>\n <DashboardInvestmentOpportunitiesView {...investmentOpportunities} />\n </div>\n </div>\n </div>\n )\n}\n"]}