@deframe-sdk/components 0.1.17 → 0.1.19
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.d.mts +151 -37
- package/dist/index.d.ts +151 -37
- package/dist/index.js +3080 -354
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +3075 -357
- package/dist/index.mjs.map +1 -1
- package/dist/styles.css +477 -10
- package/package.json +1 -1
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/history-details/HistoryDetailsComponents.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/loading-dots/LoadingDots.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/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/token-with-chain-badge/TokenWithChainBadge.tsx","../src/stories/swap-processing-view/SwapProcessingView.tsx","../src/stories/swap-processing-view/SwapProcessingViewSimple.tsx","../src/stories/swap-crosschain-processing-view/SwapCrossChainProcessingView.tsx","../src/stories/swap-signature-warning-view/SwapSignatureWarningView.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/choose-a-network-view/ChooseANetworkView.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","HiArrowRight","useState","useEffect","MdOutlineSearch","MdOutlineSearchOff","IoCheckmarkOutline","IoTimeOutline","IoAlertCircleOutline","textColorClass","Fragment","MdOutlineSwapHoriz","MdHistory","MdOutlineSwapVert","PiClockCountdownBold","MdArrowUpward","HiArrowLeft","MdArrowRight","MdArrowDownward","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'\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\nexport const SuccessBadge: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <div data-test-id='success-badge' className='bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-success)_12%,transparent)] 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)] bg-[var(--deframe-widget-color-state-success)]' />\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\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 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 SuccessBadge,\n TransactionId,\n ExplorerLink,\n TwoLineValue,\n} from './HistoryDetailsComponents'\nimport type { HistoryDetailsLabels } from './history-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 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 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 <SuccessBadge>{statusLabel}</SuccessBadge>\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 </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 SuccessBadge,\n TransactionId,\n ExplorerLink,\n TwoLineValue,\n} from './HistoryDetailsComponents'\nimport type { HistoryAssetViewProps, HistoryDetailsViewProps } from './HistoryDepositDetailsView'\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 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 <SuccessBadge>{statusLabel}</SuccessBadge>\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 </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 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, { 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 { 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'\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","import React from 'react'\nimport { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport type { SwapProcessingViewProps } from './SwapProcessingView'\n\nexport type { SwapProcessingViewProps }\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\n/**\n * Visual variant of SwapProcessingView.\n * Design identical to the SwapPanel ProcessingOverlay:\n * glass-blur transparent background, rotating sync icon,\n * uppercase green title + muted subtitle. No chrome, no transaction details.\n */\nexport const SwapProcessingViewSimple: React.FC<Partial<SwapProcessingViewProps>> = ({\n titleText,\n descriptionPrefix,\n activityHistoryText,\n onGoToHistory,\n}) => {\n return (\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 {titleText}\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 {descriptionPrefix}{' '}\n <button\n data-test-id='swap-processing-simple-history-link'\n onClick={onGoToHistory}\n aria-label={activityHistoryText}\n className={twMerge(\n 'bg-transparent border-0 p-0 cursor-pointer',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'text-[color:var(--deframe-widget-color-brand-primary)]'\n )}\n >\n {activityHistoryText}\n </button>\n </span>\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 { 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 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 type { SwapSuccessViewProps } from './SwapSuccessView'\n\nexport type { SwapSuccessViewProps }\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\n/**\n * Visual variant of SwapSuccessView.\n * Design identical to the SwapPanel SuccessOverlay:\n * glass-blur transparent background, centered icon + title + subtitle.\n * No chrome, no transaction details.\n */\nexport const SwapSuccessViewSimple: React.FC<Partial<SwapSuccessViewProps>> = ({\n onGoToWallet,\n labels,\n}) => {\n return (\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 {labels?.title}\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 {labels?.descriptionSuffix}{' '}\n <button\n data-test-id='swap-success-simple-wallet-link'\n onClick={onGoToWallet}\n aria-label={labels?.walletLinkText}\n className={twMerge(\n 'bg-transparent border-0 p-0 cursor-pointer',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'text-[color:var(--deframe-widget-color-brand-primary)]'\n )}\n >\n {labels?.walletLinkText}\n </button>\n </span>\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'\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-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 {errorTitle}\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 {errorDescription}\n </span>\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 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 /** 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 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, { 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 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}\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 <TextHeading variant='h3'>{card.value}</TextHeading>\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'\n\nexport interface EarnInvestmentSummaryViewProps {\n overviewDescription: string\n totalInvestedLabel: string\n totalInvestedValue: string\n totalReturnLabel: string\n totalReturnValue: 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 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 { label: totalInvestedLabel, value: totalInvestedValue },\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'\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 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 </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'\n\nexport interface EarnTokenSelectorViewProps {\n selectedToken: { symbol: string; logoURI?: string | null } | null;\n onTokenClick: () => 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}\n\nexport const EarnTokenSelectorView: React.FC<EarnTokenSelectorViewProps> = ({\n selectedToken,\n onTokenClick,\n isLoading,\n selectTokenLabel,\n chainLabel,\n chainImage,\n chainDirectionLabel,\n chainDisabledTitle,\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 - DISABLED */}\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 disabled\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)] opacity-60 cursor-not-allowed'\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 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'\n\nexport interface EarnWithdrawTokenSelectorViewProps {\n selectedToken: { symbol: string; logoURI?: string | null } | null;\n onTokenClick: () => void;\n selectTokenLabel: string;\n chainLabel: string;\n chainImage?: string;\n chainDirectionLabel: string;\n chainDisabledTitle?: string;\n}\n\nexport const EarnWithdrawTokenSelectorView: React.FC<EarnWithdrawTokenSelectorViewProps> = ({\n selectedToken,\n onTokenClick,\n selectTokenLabel,\n chainLabel,\n chainImage,\n chainDirectionLabel,\n chainDisabledTitle,\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 - DISABLED */}\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 disabled\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)] opacity-60 cursor-not-allowed'\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 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'\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\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\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 />\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'\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\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\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 />\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"],"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","React20","React21","React22","_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 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'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\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 onTryAgain,\n cancelButtonText,\n retryButtonText,\n}) => {\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 {/* Action buttons */}\n <div\n data-test-id='swap-signature-warning-simple-actions'\n className='flex gap-[var(--deframe-widget-size-gap-sm)] w-full max-w-[320px]'\n >\n <SecondaryButton\n data-test-id='swap-signature-warning-simple-cancel'\n aria-label={cancelButtonText ?? 'Cancel'}\n className='flex-1'\n onClick={onCancel}\n >\n {cancelButtonText}\n </SecondaryButton>\n <PrimaryButton\n data-test-id='swap-signature-warning-simple-retry'\n aria-label={retryButtonText ?? 'Retry'}\n className='flex-1'\n onClick={onTryAgain}\n >\n {retryButtonText}\n </PrimaryButton>\n </div>\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 /** 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 error message shown in the inline notification */\n errorMessage?: 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 'py-[var(--deframe-widget-size-padding-y-sm)] 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 {/* Placeholder circle */}\n <div\n data-test-id='swap-from-card-simple-token-placeholder-icon'\n className='w-[38px] h-[38px] rounded-[var(--deframe-widget-size-radius-full)] bg-[var(--deframe-widget-color-bg-tertiary)] flex-shrink-0'\n />\n <span\n data-test-id='swap-from-card-simple-token-placeholder-label'\n className={twMerge(\n 'text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)]',\n 'font-[var(--deframe-widget-font-family)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'whitespace-nowrap'\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} →\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 'py-[var(--deframe-widget-size-padding-y-sm)] 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 {/* Empty circle placeholder */}\n <div\n data-test-id='swap-to-simple-placeholder-circle'\n className='rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 bg-[var(--deframe-widget-color-bg-tertiary)]'\n style={{ width: 38, height: 38 }}\n />\n <span\n data-test-id='swap-to-simple-placeholder-label'\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-secondary)] whitespace-nowrap'\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 {labels.searchingQuoteLabel}\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"]}
|