@deframe-sdk/components 0.1.9 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/stories/buttons/action-button/ActionButton.tsx","../src/stories/buttons/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/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/lists/wallet-list/WalletList.tsx","../src/stories/lists/wallet-list/WalletItem.tsx","../src/stories/currency/Currency.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/types.ts","../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/close-button/CloseButton.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-network-selector/SwapNetworkSelectorView.tsx","../src/stories/swap-quote-header/SwapQuoteHeaderView.tsx","../src/stories/swap-amount-input/SwapAmountInputView.tsx","../src/stories/swap-output-amount/SwapOutputAmountView.tsx","../src/stories/swap-quote-errors/SwapQuoteErrorsView.tsx","../src/stories/swap-slippage-tolerance-buttons/SwapSlippageToleranceButtonsView.tsx","../src/stories/swap-token-selector/SwapTokenSelectorView.tsx","../src/stories/swap-quote-blockchain-costs/SwapQuoteBlockchainCostsView.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-crosschain-processing-view/SwapCrossChainProcessingView.tsx","../src/stories/swap-signature-warning-view/SwapSignatureWarningView.tsx","../src/stories/swap-success-view/SwapSuccessView.tsx","../src/stories/swap-transaction-failed-view/SwapTransactionFailedView.tsx","../src/stories/choose-an-asset-swap-view/ChooseAnAssetSwapView.tsx"],"names":["twMerge","jsx","Input","jsxs","React","React2","React3","React4","React5","motion","React6","AnimatePresence","React7","MdInfoOutline","MdWarningAmber","MdErrorOutline","MdCheckCircleOutline","MdClose","React8","React9","React10","useState","useEffect","_a","useMemo","HiChevronUp","HiChevronDown","gapClasses","HiChevronLeft","HiXMark","Fragment","HiArrowRight","MdOutlineSearch","MdOutlineSearchOff","IoCheckmarkOutline","IoTimeOutline","IoAlertCircleOutline","textColorClass","MdOutlineSwapHoriz"],"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 getStyles = () => {\n if (disabled) {\n return {\n container:\n 'flex-1 h-12 rounded inline-flex flex-col justify-center items-center gap-2 overflow-hidden bg-bg-muted dark:bg-bg-muted-dark',\n inner:\n 'self-stretch flex-1 pl-4 pr-6 py-2.5 inline-flex justify-center items-center gap-2',\n text: 'opacity-state-disabled-content text-center justify-center text-text-disabled dark:text-text-disabled-dark text-sm font-semibold font-poppins leading-5',\n }\n }\n return {\n container:\n 'flex-1 h-12 bg-brand-primary rounded inline-flex flex-col justify-center items-center gap-2 overflow-hidden hover:shadow-md transition-shadow duration-200',\n inner:\n 'self-stretch flex-1 pl-4 pr-6 py-2.5 inline-flex justify-center items-center gap-2 hover:opacity-90 focus:opacity-85 active:opacity-85 transition-opacity duration-200',\n text: 'text-center justify-center text-text-inverse text-sm font-semibold font-poppins leading-5',\n }\n }\n\n const styles = getStyles()\n\n const containerClasses = twMerge(\n 'flex-1 px-2 py-1 rounded border border-border-subtle dark:border-border-subtle-dark bg-bg-muted dark:bg-bg-muted-dark text-text-secondary dark:text-text-secondary-dark text-sm font-semibold font-poppins leading-5 hover:border-border-default dark:hover:border-border-default-dark focus:outline-none focus:ring-2 focus:ring-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 <div className={styles.inner}>\n <div className={styles.text}>{children}</div>\n </div>\n </button>\n )\n}\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 px-2 py-1 rounded border border-border-subtle dark:border-border-subtle-dark bg-bg-muted dark:bg-bg-muted-dark text-text-secondary dark:text-text-secondary-dark text-sm font-semibold font-poppins leading-5 hover:border-border-default dark:hover:border-border-default-dark focus:outline-none focus:ring-2 focus:ring-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-primary)]',\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-[var(--deframe-widget-color-text-primary)]',\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-[var(--deframe-widget-color-text-primary-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-primary)]',\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-secondary)]',\n 'border-[color:var(--deframe-widget-color-border-secondary)]',\n 'hover:opacity-90',\n 'cursor-pointer',\n ].join(' '),\n disabled: [\n 'text-[color:var(--deframe-widget-color-text-secondary-disabled)]',\n 'border-[color:var(--deframe-widget-color-border-secondary-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-primary)]',\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-brand-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-primary)]',\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-primary)]',\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 error: 'border border-[var(--deframe-widget-color-state-error)]',\n disabled: [\n 'border',\n 'border-[var(--deframe-widget-color-border-primary-disabled)]',\n 'opacity-60',\n 'cursor-not-allowed',\n ].join(' '),\n default: 'border border-[var(--deframe-widget-color-border-primary)]',\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-primary)]',\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-[var(--deframe-widget-color-link)]',\n 'underline',\n 'cursor-pointer',\n ].join(' '),\n disabled: [\n 'text-[var(--deframe-widget-color-link-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 </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 baseClasses = [\n 'self-stretch min-h-16 relative',\n 'rounded-[var(--deframe-widget-size-radius-xs)]',\n 'border-[length:var(--deframe-widget-size-border-xs)]',\n 'border-[var(--deframe-widget-color-border-primary)]',\n 'flex flex-col justify-center items-center',\n 'transition-colors',\n 'bg-[var(--deframe-widget-color-bg-primary)]',\n ].join(' ')\n\n const stateClasses = {\n clickable: 'cursor-pointer hover:border-[var(--deframe-widget-color-border-secondary)]',\n static: '',\n } as const\n\n const containerClasses = twMerge(\n baseClasses,\n stateClasses[onClick ? 'clickable' : 'static'],\n containerClassName\n )\n\n const innerClasses = 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-md)]',\n 'py-[var(--deframe-widget-size-padding-y-sm)]',\n 'text-[var(--deframe-widget-color-text-primary)]',\n className\n )\n\n return (\n <li\n data-slot='list-item'\n data-test-id='list-item'\n className={containerClasses}\n onClick={onClick}\n tabIndex={onClick ? 0 : undefined}\n role={onClick ? 'button' : undefined}\n onKeyDown={onClick ? (e) => e.key === 'Enter' && onClick() : undefined}\n {...props}\n >\n <div className={innerClasses}>\n {children}\n </div>\n </li>\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 { 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 - Container wrapper for wallet list items\n * Provides consistent spacing and layout for wallet options\n */\nexport default function WalletListContainer ({\n children,\n className,\n}: WalletListContainerProps) {\n return (\n <div className={twMerge('flex flex-col gap-4', className)}>\n {children}\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\ninterface TextProps extends React.HTMLAttributes<HTMLElement> {\n as?: keyof React.JSX.IntrinsicElements\n variantClass?: string\n}\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 className = '',\n ...props\n },\n ref\n ) => {\n const baseClasses = [\n '[font-family:var(--deframe-widget-font-family-primary)]',\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 'text-[color:var(--deframe-widget-color-text-primary)]'\n ].join(' ')\n\n const textClasses = twMerge(baseClasses, className)\n\n return React.createElement(\n Component,\n {\n ref,\n className: textClasses,\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 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-lg)]',\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-lg)]',\n '[font-weight:var(--deframe-widget-font-weight-semibold)]',\n ].join(' '),\n } as const\n\n type AccentVariant = keyof typeof accentVariants\n const variantClass = accentVariants[variant as AccentVariant]\n const accentClasses = twMerge(variantClass, className)\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 {...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 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-lg)]',\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-lg)]',\n '[font-weight:var(--deframe-widget-font-weight-regular)]',\n ].join(' '),\n } as const\n\n type BodyVariant = keyof typeof bodyVariants\n const variantClass = bodyVariants[variant as BodyVariant]\n const bodyClasses = twMerge(variantClass, className)\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 {...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 className = '',\n ...props\n }, ref) => {\n const headingVariants = {\n 'h-large': [\n '[font-size:var(--deframe-widget-font-size-h-large)]',\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-h1)]',\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-h2)]',\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-h3)]',\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-h4)]',\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-h5)]',\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 type HeadingVariant = keyof typeof headingVariants\n const variantClass = headingVariants[variant as HeadingVariant]\n const headingClasses = twMerge(variantClass, className)\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 {...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 { twMerge } from 'tailwind-merge'\nimport WalletListContainer from './WalletListContainer'\nimport { ListItem } from '../List'\nimport {\n ListItemContent,\n ListItemLeftSide,\n ListItemRightSide,\n} from '../ListCompound'\nimport { TextBody } from '../../texts'\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 - can be an image URL or React component */\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 /** Title text for the wallet connect screen */\n title?: string;\n /** Subtitle text for the wallet connect screen */\n subtitle?: string;\n /** Additional CSS class names */\n className?: string;\n}\n\n/**\n * ConnectWalletList - Displays a list of wallet options for connection\n * Includes title, subtitle, and clickable wallet items\n */\nexport default function ConnectWalletList ({\n wallets,\n className,\n}: ConnectWalletListProps) {\n const handleWalletClick = (wallet: WalletOption) => {\n wallet.onClick?.()\n }\n\n return (\n <div className={twMerge('w-full', className)}>\n <WalletListContainer>\n {wallets.map((wallet) => (\n <ListItem key={wallet.id} onClick={() => handleWalletClick(wallet)}>\n <ListItemLeftSide>\n {typeof wallet.icon === 'string'\n ? (\n <img\n src={wallet.icon}\n alt={wallet.name}\n className='w-10 h-10 rounded-full'\n />\n )\n : (\n wallet.icon\n )}\n </ListItemLeftSide>\n <ListItemContent>\n <TextBody variant='text-medium'>{wallet.name}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n {/* Chevron */}\n <svg\n className='flex-shrink-0 w-5 h-5 text-gray-400'\n fill='none'\n viewBox='0 0 24 24'\n stroke='currentColor'\n >\n <path\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth={2}\n d='M9 5l7 7-7 7'\n />\n </svg>\n </ListItemRightSide>\n </ListItem>\n ))}\n </WalletListContainer>\n </div>\n )\n}\n","import { twMerge } from 'tailwind-merge'\nimport { TextBody } from '../../texts'\nimport type { WalletItemProps } from '../index'\n\nexport default function WalletItem ({\n id,\n name,\n icon,\n onClick,\n className,\n}: WalletItemProps) {\n const baseClasses = [\n 'w-full 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 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'cursor-pointer',\n 'transition-colors',\n 'hover:bg-[var(--deframe-widget-color-bg-tertiary)]',\n 'focus:outline-none',\n ].join(' ')\n\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(baseClasses, className)}\n >\n <div\n data-slot='wallet-item-icon'\n data-test-id='wallet-item-icon'\n className='flex-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='w-full h-full object-cover'\n />\n )\n : (\n icon\n )}\n </div>\n\n <TextBody\n data-slot='wallet-item-name'\n data-test-id='wallet-item-name'\n variant='text-medium'\n className='flex-1 text-left text-[var(--deframe-widget-color-text-primary)]'\n >\n {name}\n </TextBody>\n\n <svg\n data-slot='wallet-item-chevron'\n data-test-id='wallet-item-chevron'\n className='flex-shrink-0 w-5 h-5 text-[var(--deframe-widget-color-text-secondary)]'\n fill='none'\n viewBox='0 0 24 24'\n stroke='currentColor'\n >\n <path\n strokeLinecap='round'\n strokeLinejoin='round'\n strokeWidth={2}\n d='M9 5l7 7-7 7'\n />\n </svg>\n </button>\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: { primary: 'text-3xl', secondary: 'text-sm', gap: 'gap-0.5' },\n md: { primary: 'text-5xl', secondary: 'text-base', gap: 'gap-1' },\n lg: { primary: 'text-6xl', secondary: 'text-lg', gap: 'gap-1' },\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-bold text-text-primary dark:text-text-primary-dark font-poppins',\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-text-secondary dark:text-text-secondary-dark font-poppins',\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 { 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 // Header variant: full width, space between tabs, minimal padding\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 pt-2',\n className\n )}\n style={{\n paddingLeft: 'var(--spacing-md, 16px)',\n paddingRight: 'var(--spacing-md, 16px)',\n backgroundColor: 'var(--color-bg-default, transparent)'\n }}\n {...props}\n >\n {children}\n </div>\n )\n }\n\n // Default/other variants\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-border-default dark:border-border-default-dark',\n variant === 'primary' ? 'h-[72px] gap-6' : '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 style,\n ...props\n },\n ref\n ) => {\n const { value: activeValue, onValueChange, variant } = useTabs()\n const isActive = activeValue === value\n\n // Header variant uses inline styles for colors to ensure CSS variables work\n const headerStyle = variant === 'header'\n ? {\n color: isActive\n ? 'var(--color-brand-primary)'\n : 'var(--color-text-secondary)',\n ...style\n }\n : style\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-poppins transition-colors cursor-pointer disabled:pointer-events-none disabled:opacity-50 outline-none',\n variant === 'header'\n ? 'flex-1 text-sm font-semibold py-3'\n : variant === 'primary'\n ? 'h-[72px] text-base font-medium px-0 pb-3 pt-2 flex-none'\n : 'h-12 text-[12px] font-semibold px-4 flex-none',\n variant !== 'header' && (isActive ? 'text-brand-primary' : 'text-text-secondary dark:text-text-secondary-dark hover:text-text-primary dark:hover:text-text-primary-dark'),\n className\n )}\n style={headerStyle}\n {...props}\n >\n <span>{children}</span>\n {isActive && variant === 'header' && (\n <motion.span\n layoutId='header-tab-indicator'\n className='absolute rounded-t-full'\n style={{\n bottom: 0,\n left: 0,\n right: 0,\n marginLeft: 'auto',\n marginRight: 'auto',\n width: '3.5rem',\n height: '3px',\n backgroundColor: 'var(--color-brand-primary)'\n }}\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-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-0' : 'mt-6',\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-2',\n 'bg-[var(--color-bg-subtle,#1a1a1a)] border border-[var(--color-border-default,#333)] rounded px-3 py-1.5',\n 'text-sm text-[var(--color-text-primary,#fff)] text-left',\n 'transition-colors cursor-pointer',\n 'hover:border-[var(--color-border-strong,#555)]',\n 'focus:outline-none focus:ring-2 focus:ring-[var(--color-brand-primary,#7C3AED)]/50 focus:border-[var(--color-brand-primary,#7C3AED)]',\n _disabled && 'opacity-50 cursor-not-allowed',\n className\n )}\n >\n <span\n className={\n !hasChildren\n ? 'text-[var(--color-text-tertiary,#888)]'\n : undefined\n }\n >\n {hasChildren ? children : placeholder}\n </span>\n <ChevronDownIcon\n className={twMerge(\n 'w-4 h-4 text-[var(--color-text-secondary,#999)] 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-1',\n 'bg-[var(--color-bg-raised,#1f1f1f)] border border-[var(--color-border-default,#333)] rounded shadow-lg',\n 'max-h-60 overflow-auto',\n 'py-1',\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-3 py-2 text-sm cursor-pointer transition-colors',\n 'text-[var(--color-text-primary,#fff)]',\n _isSelected && 'text-[var(--color-text-highlight,#7C3AED)]',\n _isHighlighted && 'bg-[var(--color-bg-muted,#2a2a2a)]',\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, #2C2C2C 0%, #2C2C2C 60%, #121212 100%)'\n\n return (\n <div\n className={twMerge(\n 'relative overflow-hidden animate-fade-in',\n variant === 'circle' ? 'rounded-full' : 'rounded',\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-white/20 to-transparent dark:via-gray-600/30' />\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 p-2'\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'\nimport type { BannerNotificationProps } from './index'\n\nexport function BannerNotification ({\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-lg',\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 {showIcon && (\n <BannerNotificationIcon>{resolvedIcon}</BannerNotificationIcon>\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-[#121212] rounded p-3 flex items-center justify-between gap-2 border border-gray-700',\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-gray-400 hover:text-white 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-green-500'\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('bg-[#1A1A1A] rounded p-4 group', className)}\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-white font-medium'>{title}</TextBody>\n <svg\n className='w-5 h-5 text-gray-400 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-4',\n showDividers && 'divide-y divide-[#2A2A2A]',\n contentClassName\n )}\n >\n {items.map((item, index) => (\n <div key={index} className='flex justify-between py-2'>\n <TextBody\n variant='text-small'\n className={twMerge('text-text-tertiary dark:text-text-tertiary-dark', item.labelClassName)}\n >\n {item.label}\n </TextBody>\n {typeof item.value === 'string'\n ? (\n <TextBody\n variant='text-small'\n className={twMerge('text-text-primary dark:text-text-primary-dark font-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(--color-bg-subtle,#1a1a1a)] rounded-lg border border-border-default dark:border-border-default-dark p-4 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-semibold text-text-primary dark:text-text-primary-dark'\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-text-secondary dark:text-text-secondary-dark 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-border-default dark:bg-border-default-dark mt-3'\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-0', 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-3'\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-medium uppercase tracking-[0.07em] text-text-tertiary dark:text-text-tertiary-dark 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-semibold text-text-primary dark:text-text-primary-dark 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-border-default dark:bg-border-default-dark'\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-black p-6\">\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-black/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(--sheet-bg,#0A0A0A)] shadow-2xl overflow-hidden',\n position === 'bottom'\n ? 'max-w-full rounded-t-[32px]'\n : 'max-w-lg rounded-2xl mx-4',\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","/**\n * Theme color configuration for Deframe components\n */\nexport interface DeframeThemeColors {\n // Brand colors\n /** Primary brand color - used for buttons, links, accents */\n brandPrimary?: string\n /** Secondary brand color - used for secondary accents */\n brandSecondary?: string\n\n // Background colors\n /** Main background color */\n bgDefault?: string\n /** Subtle background color */\n bgSubtle?: string\n /** Muted/disabled background color */\n bgMuted?: string\n\n // Text colors\n /** Primary text color */\n textPrimary?: string\n /** Secondary text color */\n textSecondary?: string\n /** Disabled text color */\n textDisabled?: string\n /** Text color for dark backgrounds */\n textInverse?: string\n\n // State colors\n /** Success state color */\n stateSuccess?: string\n /** Error state color */\n stateError?: string\n /** Warning state color */\n stateWarning?: string\n}\n\n/**\n * Complete theme configuration for Deframe components\n */\nexport interface DeframeTheme {\n colors?: DeframeThemeColors\n}\n\n/**\n * Theme mode - controls light/dark appearance\n */\nexport type ThemeMode = 'light' | 'dark' | 'auto'\n\n/**\n * Theme preset - predefined color schemes\n */\nexport type ThemePreset = 'default' | 'cryptocontrol'\n\n/**\n * Structured theme configuration with mode, preset, and overrides\n */\nexport interface DeframeThemeConfig {\n /** Theme mode: 'light', 'dark', or 'auto' (follows system preference) */\n mode?: ThemeMode\n /** Theme preset: 'default' or 'cryptocontrol' */\n preset?: ThemePreset\n /** Custom color overrides for each mode */\n overrides?: {\n light?: DeframeTheme\n dark?: DeframeTheme\n }\n}\n\n/**\n * Default theme values - these serve as fallbacks when no custom theme is provided\n */\nexport const defaultThemeColors: Required<DeframeThemeColors> = {\n // Brand\n brandPrimary: '#405EFF',\n brandSecondary: '#A9ABF7',\n\n // Backgrounds\n bgDefault: '#FFFFFF',\n bgSubtle: '#F8F9FA',\n bgMuted: '#E3E4E8',\n\n // Text\n textPrimary: '#252050',\n textSecondary: '#5C5F66',\n textDisabled: '#C6C8CC',\n textInverse: '#FFFFFF',\n\n // States\n stateSuccess: '#2BA176',\n stateError: '#FF4D4F',\n stateWarning: '#F6A700'\n}\n\n/**\n * Dark mode theme values\n */\nexport const darkThemeColors: Required<DeframeThemeColors> = {\n // Brand\n brandPrimary: '#405EFF',\n brandSecondary: '#A9ABF7',\n\n // Backgrounds\n bgDefault: '#121212',\n bgSubtle: '#1E1E1E',\n bgMuted: '#2C2C2C',\n\n // Text\n textPrimary: '#FFFFFF',\n textSecondary: '#E3E4E8',\n textDisabled: '#898D95',\n textInverse: '#252050',\n\n // States\n stateSuccess: '#2BA176',\n stateError: '#FF4D4F',\n stateWarning: '#F6A700'\n}\n\n/**\n * Cryptocontrol theme values\n */\nexport const cryptocontrolThemeColors: Required<DeframeThemeColors> = {\n // Brand - green primary for cryptocontrol\n brandPrimary: '#1FC16B',\n brandSecondary: '#A9ABF7',\n\n // Backgrounds (same as dark)\n bgDefault: '#121212',\n bgSubtle: '#1E1E1E',\n bgMuted: '#2C2C2C',\n\n // Text (same as dark)\n textPrimary: '#FFFFFF',\n textSecondary: '#E3E4E8',\n textDisabled: '#898D95',\n textInverse: '#252050',\n\n // States\n stateSuccess: '#2BA176',\n stateError: '#FF4D4F',\n stateWarning: '#F6A700'\n}\n\n/**\n * Convert theme colors to CSS variable style object\n */\nexport function themeToCSS (theme?: DeframeTheme): React.CSSProperties {\n if (!theme?.colors) return {}\n\n const vars: Record<string, string> = {}\n const colors = theme.colors\n\n if (colors.brandPrimary) vars['--deframe-brand-primary'] = colors.brandPrimary\n if (colors.brandSecondary) vars['--deframe-brand-secondary'] = colors.brandSecondary\n if (colors.bgDefault) vars['--deframe-bg-default'] = colors.bgDefault\n if (colors.bgSubtle) vars['--deframe-bg-subtle'] = colors.bgSubtle\n if (colors.bgMuted) vars['--deframe-bg-muted'] = colors.bgMuted\n if (colors.textPrimary) vars['--deframe-text-primary'] = colors.textPrimary\n if (colors.textSecondary) vars['--deframe-text-secondary'] = colors.textSecondary\n if (colors.textDisabled) vars['--deframe-text-disabled'] = colors.textDisabled\n if (colors.textInverse) vars['--deframe-text-inverse'] = colors.textInverse\n if (colors.stateSuccess) vars['--deframe-state-success'] = colors.stateSuccess\n if (colors.stateError) vars['--deframe-state-error'] = colors.stateError\n if (colors.stateWarning) vars['--deframe-state-warning'] = colors.stateWarning\n\n return vars as React.CSSProperties\n}\n","import { useEffect, useState, useMemo } from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport {\n type DeframeTheme,\n type DeframeThemeConfig,\n type ThemePreset,\n themeToCSS\n} from './types'\n\n/**\n * Get system color mode preference\n */\nfunction getSystemColorMode (): 'light' | 'dark' {\n if (typeof window === 'undefined' || !window.matchMedia) return 'light'\n return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'\n}\n\n/**\n * Resolve theme configuration to provider theme and custom styles\n */\nfunction resolveThemeConfig (\n config: DeframeThemeConfig | undefined,\n systemMode: 'light' | 'dark'\n): { providerTheme: 'light' | 'dark' | 'cryptocontrol'; customTheme?: DeframeTheme } {\n const mode: 'light' | 'dark' = config?.mode === 'auto'\n ? systemMode\n : (config?.mode ?? 'light')\n\n const preset: ThemePreset = config?.preset ?? 'default'\n\n const providerTheme: 'light' | 'dark' | 'cryptocontrol' =\n preset === 'cryptocontrol' ? 'cryptocontrol' : mode === 'dark' ? 'dark' : 'light'\n\n // Get override colors for the active mode\n const overrideColors = mode === 'dark'\n ? config?.overrides?.dark?.colors\n : config?.overrides?.light?.colors\n\n const customTheme = overrideColors ? { colors: overrideColors } : undefined\n\n return { providerTheme, customTheme }\n}\n\nexport interface DeframeComponentsProviderProps {\n /** Theme preset: 'light' | 'dark' | 'cryptocontrol' (legacy) */\n theme?: string\n /** Structured theme configuration (preferred) */\n themeConfig?: DeframeThemeConfig\n /** Custom theme colors that override the preset */\n customTheme?: DeframeTheme\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 theme = 'light',\n themeConfig,\n customTheme,\n className,\n children\n}: DeframeComponentsProviderProps) {\n // Track system color mode for 'auto' mode\n const [systemMode, setSystemMode] = useState<'light' | 'dark'>(() => getSystemColorMode())\n\n // Listen for system color mode changes when using 'auto' mode\n useEffect(() => {\n const needsSystem = themeConfig?.mode === 'auto'\n if (!needsSystem || typeof window === 'undefined' || !window.matchMedia) return\n\n const mq = window.matchMedia('(prefers-color-scheme: dark)')\n const handler = () => setSystemMode(mq.matches ? 'dark' : 'light')\n handler()\n mq.addEventListener?.('change', handler)\n return () => mq.removeEventListener?.('change', handler)\n }, [themeConfig?.mode])\n\n // Resolve the final theme values\n const resolvedTheme = useMemo(() => {\n // If using new themeConfig, resolve it\n if (themeConfig) {\n return resolveThemeConfig(themeConfig, systemMode)\n }\n\n // Legacy: use theme string directly\n return {\n providerTheme: theme as 'light' | 'dark' | 'cryptocontrol',\n customTheme\n }\n }, [themeConfig, theme, customTheme, systemMode])\n\n const themeClass = resolvedTheme.providerTheme === 'light' ? '' : resolvedTheme.providerTheme\n const colorScheme = resolvedTheme.providerTheme === 'light' ? 'light' : 'dark'\n\n // Convert custom theme to CSS variables\n const customCSSVars = themeToCSS(resolvedTheme.customTheme)\n\n return (\n <div\n className={twMerge('deframe-widget', themeClass, className)}\n style={{ colorScheme, ...customCSSVars }}\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-border-default dark:border-border-default-dark pb-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 = 'text-sm text-text-secondary dark:text-text-secondary-dark'\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-text-primary dark:text-text-primary-dark',\n success: 'text-state-success',\n warning: 'text-state-warning',\n error: 'text-state-error',\n} as const\n\nexport const InfoValue: React.FC<InfoValueProps> = ({ children, variant = 'default', className }) => {\n const baseClasses = 'text-sm font-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-border-default dark:border-border-default-dark pb-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 = 'text-sm text-text-secondary dark:text-text-secondary-dark'\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 = 'text-sm font-semibold text-text-primary dark:text-text-primary-dark'\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-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='text-text-sm text-text-secondary dark:text-text-secondary-dark'>\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-text-secondary dark:text-text-secondary-dark' />\n )\n : (\n <HiChevronDown className='w-3 h-3 text-text-secondary dark:text-text-secondary-dark' />\n )}\n </div>\n </div>\n <span className='text-text-sm font-semibold text-text-secondary dark:text-text-secondary-dark'>\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-md bg-bg-default lg:bg-bg-subtle dark:bg-bg-default-dark lg:dark:bg-bg-subtle-dark text-text-primary dark:text-text-primary-dark 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-bg-subtle dark:bg-bg-subtle-dark lg:!bg-bg-raised rounded shadow-sm p-md flex flex-col 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-sm pr-md pt-sm pb-md border-b items-center border-border-subtle dark:border-border-subtle-dark 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-xs',\n sm: 'gap-sm',\n md: 'gap-md',\n lg: '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-xs',\n sm: 'gap-sm',\n md: 'gap-md',\n lg: '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-md py-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-sm pr-md pt-sm pb-md border-b border-border-subtle dark:border-border-subtle-dark 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-full flex items-center justify-center text-text-secondary dark:text-text-secondary-dark hover:text-brand-primary cursor-pointer'\n aria-label={backAriaLabel}\n >\n <HiChevronLeft className='w-6 h-6 text-text-tertiary dark:text-text-tertiary-dark' />\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 { HiXMark } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface CloseButtonProps {\n onClick?: () => void;\n testId?: string;\n ariaLabel?: string;\n className?: string;\n}\n\nexport const CloseButton: React.FC<CloseButtonProps> = ({ onClick, testId, ariaLabel = 'Close', className }) => {\n const baseClasses = 'w-12 h-12 rounded-full flex items-center justify-center text-text-secondary dark:text-text-secondary-dark hover:text-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","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-1'\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-2 py-1 opacity-95 bg-red-500/20 rounded-lg outline outline-1 outline-offset-[-1px] outline-state-error flex justify-center items-center gap-1'\n >\n <div className='flex justify-start items-center gap-2.5'>\n <div className='justify-start text-state-error text-xs font-normal font-poppins 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-1'\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-2 py-1 opacity-95 bg-amber-500/20 rounded-lg outline outline-1 outline-offset-[-1px] outline-state-warning flex justify-center items-center gap-1'\n >\n <div className='flex justify-start items-center gap-2.5'>\n <div className='justify-start text-state-warning text-xs font-normal font-poppins 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-1'\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-2 py-1 opacity-95 bg-teal-600/20 rounded-lg outline outline-1 outline-offset-[-1px] outline-state-success flex justify-center items-center gap-1'\n >\n <div className='flex justify-start items-center gap-2.5'>\n <div className='justify-start text-state-success text-xs font-normal font-poppins 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-xs',\n sm: 'gap-sm',\n md: 'gap-md',\n lg: '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-md py-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='text-text-sm-mobile text-text-secondary dark:text-text-secondary-dark'>\n {children}\n </p>\n)\n\nexport const StrategyName: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='strategy-name' className='text-accent-md-mobile text-text-secondary dark:text-text-secondary-dark'>\n {children}\n </p>\n)\n\nexport const Amount: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='amount' className='text-accent-md-mobile text-text-secondary dark:text-text-secondary-dark'>\n {children}\n </p>\n)\n\nexport const AmountInUsd: React.FC<{ children: React.ReactNode }> = ({ children }) => (\n <p data-test-id='amount-in-usd' className='text-text-sm-mobile text-text-secondary dark:text-text-secondary-dark'>\n ~ {children}\n </p>\n)\n\nexport const EmptyValue: React.FC = () => (\n <p data-test-id='empty-value' className='text-text-sm-mobile text-text-secondary dark:text-text-secondary-dark'>\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-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-[rgba(43,161,118,0.12)] flex items-center gap-xs px-[8px] py-[2px] rounded-[24px]'>\n <span className='w-2 h-2 rounded-full bg-state-success' />\n <span className='text-text-sm-mobile text-text-primary dark:text-text-primary-dark'>\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='text-text-sm-mobile text-text-primary dark:text-text-primary-dark'>-</span>\n }\n\n return (\n <div data-test-id='transaction-id' className='flex items-center gap-xs'>\n <span className='text-text-sm-mobile text-text-primary dark:text-text-primary-dark'>\n {truncateHash(hash)}\n </span>\n <AddressDisplay\n address={hash}\n className='border-none bg-transparent p-0 gap-0'\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-brand-primary underline text-sm font-semibold font-poppins'\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='text-text-sm-mobile text-text-secondary dark:text-text-secondary-dark font-semibold'>\n {primary}\n </p>\n <p data-test-id='two-line-value-secondary' className='text-text-sm-mobile text-text-secondary dark:text-text-secondary-dark'>\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-text-primary dark:text-text-primary-dark'>{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='!p-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='!p-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 { 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-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-text-tertiary dark:text-text-tertiary-dark'>\n {directionLabel}\n </TextBody>\n <button\n data-testid={testId}\n type='button'\n onClick={onClick}\n className='ml-6 bg-bg-muted dark:bg-bg-muted-dark border border-border-subtle dark:border-border-subtle-dark rounded-lg flex items-center gap-xs px-sm py-xs hover:border-border-default dark:hover:border-border-default-dark transition-colors text-text-sm text-text-secondary dark:text-text-secondary-dark cursor-pointer'\n aria-label={`${directionLabel} ${chainLabel}`}\n >\n {chainImage\n ? (\n <img src={chainImage} alt={chainLabel} className='w-3 h-3 rounded-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-text-tertiary dark:text-text-tertiary-dark' />\n </div>\n </button>\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-border-default dark:border-border-default-dark pb-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-semibold text-text-secondary dark:text-text-secondary-dark inline-flex items-center'>\n {label}\n </TextBody>\n <div className='flex items-center gap-md'>\n {timerElement}\n </div>\n </div>\n </div>\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 = 'text-h2-mobile font-extrabold bg-transparent outline-none text-right w-full min-w-[120px] placeholder:text-text-disabled dark:placeholder:text-text-disabled-dark'\n const colorClasses = hasError\n ? 'text-state-error dark:text-state-error'\n : 'text-text-primary dark:text-text-primary-dark'\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 { 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 = 'text-h2-mobile font-extrabold text-right w-full min-w-[120px] text-text-primary dark:text-text-primary-dark'\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-text-disabled dark:text-text-disabled-dark inline-flex items-center'>\n {loadingElement ?? searchingQuoteLabel}\n </TextBody>\n )\n : (\n displayOutput\n )}\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 { 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-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-brand-primary text-brand-primary bg-brand-tint dark:bg-brand-tint-dark'\n const inactiveClasses = 'border-border-subtle dark:border-border-subtle-dark text-text-secondary dark:text-text-secondary-dark bg-bg-default dark:bg-bg-default-dark'\n const buttonBase = 'px-sm py-xs rounded border text-text-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 { 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-border-default dark:border-border-default-dark rounded overflow-hidden hover:border-border-strong dark:hover:border-border-strong-dark transition-colors flex items-center px-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-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-full' />\n )\n : (\n <div className='w-6 h-6 rounded-full bg-bg-raised dark:bg-bg-raised-dark text-text-secondary dark:text-text-secondary-dark flex items-center justify-center text-[10px] font-semibold'>\n {(token.symbol || '').slice(0, 3).toUpperCase()}\n </div>\n )}\n <TextBody as='span' className='text-text-primary dark:text-text-primary-dark'>\n {token.symbol}\n </TextBody>\n </>\n )\n : (\n <TextBody as='span' className='text-text-secondary dark:text-text-secondary-dark'>\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-text-tertiary dark:text-text-tertiary-dark' />\n </div>\n </button>\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-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 { 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 '../close-button'\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 p-6 overflow-hidden'>\n <div className='flex-shrink-0'>\n <TextHeading>{resolvedYieldLabel}</TextHeading>\n <br />\n </div>\n <div className='flex flex-col gap-2 w-full mt-4 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-full' />\n </ListItemLeftSide>\n <ListItemContent className='gap-1'>\n <TextBody>{resolvedYieldLabel}</TextBody>\n <TextBody variant='text-small'>{Badge}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <div className='flex justify-center items-center gap-1'>\n <span className='text-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}\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}) => {\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 p-md py-lg pb-24'>\n <div className='flex flex-col gap-lg min-h-full'>\n <div className='inline-flex flex-col items-start gap-sm'>\n <img data-test-id='strategy-logo' src={logoUrl} alt={title} className='w-20 h-20 rounded-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-bg-subtle dark:bg-bg-subtle-dark lg:!bg-bg-raised'\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-border-subtle dark:border-border-subtle-dark px-md py-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-brand-primary rounded-lg transition-all duration-300'\n style={{ width: `${clampedProgress}%` }}\n />\n <div className='flex-1 h-[4px] bg-bg-muted dark:bg-bg-muted-dark rounded-lg ml-1' />\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-0.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 p-4 pr-12 leading-normal tracking-wide',\n !inputClassName ? 'bg-bg-subtle dark:bg-bg-subtle-dark' : '',\n 'placeholder:text-text-disabled dark:placeholder:text-text-disabled-dark text-text-primary dark:text-text-primary-dark',\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-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-md bg-bg-default dark:bg-bg-default-dark rounded-lg flex flex-col justify-center items-center gap-sm h-full'>\n <div className='w-full flex flex-col justify-center items-center gap-md py-20'>\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 <MdOutlineSearchOff 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}\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-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-xs'>\n <TextBody className='text-white font-medium'>{title}</TextBody>\n </div>\n <div className='flex items-center gap-xs'>\n {subtitle && (\n <TextBody variant='text-small'>{subtitle}</TextBody>\n )}\n <motion.svg\n className='w-5 h-5 text-gray-400'\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, #F6A700 0%, #F59E0B 100%)'\n}) => {\n if (type === 'success') {\n return (\n <div className='relative w-20 h-20'>\n <div className='w-full h-full rounded-full bg-brand-primary flex items-center justify-center'>\n <svg className='w-8 h-8 text-white' 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-full flex items-center justify-center' style={{ background: gradient }}>\n <svg className='w-8 h-8 text-bg-default dark:text-bg-default-dark' 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-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-white'>\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 '../close-button'\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-md pt-md'>\n <CloseButton onClick={onClose} />\n </div>\n )}\n\n <div className='w-full px-md pt-sm'>\n <ProgressIndicator progress={progress} />\n </div>\n\n <div className='flex-1 overflow-y-auto px-md py-lg flex flex-col gap-lg'>\n <div className='flex flex-col items-center gap-md pt-lg'>\n <TransactionScreenIcon type={iconType} gradient={iconGradient} />\n <TextHeading variant='h-large'>{title}</TextHeading>\n <div className='text-text-md-mobile font-poppins text-text-secondary dark:text-text-secondary-dark 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-md pb-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-xs'>\n <div className='text-accent-lg-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n {strategyName}\n </div>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n {apyLabel} <TextBody as='span' className='text-state-success'>{apyValue}</TextBody>\n </div>\n </div>\n <div className='flex items-start gap-sm'>\n <div className='w-8 h-8 rounded-full bg-bg-muted dark:bg-bg-muted-dark flex items-center justify-center'>\n {shouldShowImage\n ? <img src={iconSrc} alt={iconAlt} className='w-6 h-6 rounded-full' onError={() => setHasImageError(true)} />\n : <span className='text-xs font-semibold text-text-secondary dark:text-text-secondary-dark'>{fallbackLabel}</span>}\n </div>\n <div className='flex flex-col items-end'>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\n {amountUSD}\n </div>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\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-full bg-bg-muted dark:bg-bg-muted-dark flex items-center justify-center flex-shrink-0'>\n <IoCheckmarkOutline className='w-4 h-4' style={{ color: 'var(--color-state-success, #2BA176)' }} />\n </div>\n )\n case 'processing':\n return (\n <div className='w-6 h-6 rounded-full bg-bg-muted dark:bg-bg-muted-dark flex items-center justify-center flex-shrink-0'>\n <IoTimeOutline className='w-4 h-4' style={{ color: 'var(--color-state-warning, #F6A700)' }} />\n </div>\n )\n case 'failed':\n return (\n <div className='w-6 h-6 rounded-full bg-bg-muted dark:bg-bg-muted-dark flex items-center justify-center flex-shrink-0'>\n <IoAlertCircleOutline className='w-4 h-4' style={{ color: 'var(--color-state-error, #FF4D4F)' }} />\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-text-primary dark:text-text-primary-dark'\n : step.status === 'processing'\n ? 'text-text-secondary dark:text-text-secondary-dark'\n : step.status === 'failed'\n ? 'text-state-error'\n : 'text-text-disabled dark:text-text-disabled-dark'\n\n return <span className={`text-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='text-sm text-brand-primary dark:text-brand-primary-dark 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-text-primary dark:text-text-primary-dark'\n : step.status === 'processing'\n ? 'text-text-secondary dark:text-text-secondary-dark'\n : 'text-state-error'\n\n return <span className={`text-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-4 w-full'>\n <div className='flex-1 min-w-0'>\n <p className='text-sm text-text-primary dark:text-text-primary-dark font-medium'>\n {step.label}\n </p>\n </div>\n <div className='flex-shrink-0'>\n {step.value\n ? (\n <span className='text-sm text-text-secondary dark:text-text-secondary-dark'>\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-bg-subtle dark:bg-bg-subtle-dark lg:!bg-bg-raised',\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-3'>\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-white my-1' />\n )}\n </div>\n\n {/* Content column */}\n <div className='flex-1 pb-2 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-0 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-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-white border rounded-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-semibold underline underline-offset-2 cursor-pointer text-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-md'>\n <div className='flex flex-col items-center gap-sm'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-full' />\n <div className='flex flex-col items-center gap-xs'>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\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-brand-secondary rounded-full p-2 shadow-md z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-sm'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-full' />\n <div className='flex flex-col items-center gap-xs'>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n className='bg-bg-subtle dark:bg-bg-subtle-dark lg:!bg-bg-raised dark:lg:!bg-bg-raised-dark'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\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-semibold underline cursor-pointer underline-offset-2 text-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-md'>\n <div className='flex flex-col items-center 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-xs'>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\n {formattedInputAmountUSD}\n </div>\n </div>\n </div>\n\n <div className='absolute z-10 p-2 -translate-x-1/2 -translate-y-1/2 rounded-full shadow-md left-1/2 top-1/2 bg-brand-secondary'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center 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-xs'>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n className='bg-bg-subtle dark:bg-bg-subtle-dark lg:!bg-bg-raised dark:lg:!bg-bg-raised-dark'\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-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-md'>\n <div className='flex flex-col items-center gap-sm'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-full' />\n <div className='flex flex-col items-center gap-xs'>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\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-brand-secondary rounded-full p-2 shadow-md z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-sm'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-full' />\n <div className='flex flex-col items-center gap-xs'>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-bg-subtle dark:bg-bg-subtle-dark lg:!bg-bg-raised dark:lg:!bg-bg-raised-dark'\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-semibold'>{formattedInputAmount} {fromTokenSymbol}</strong> {labels.descriptionMiddle}{' '}\n <strong className='font-semibold'>{formattedOutputAmount} {toTokenSymbol}</strong>\n <br />\n {labels.descriptionSuffix}{' '}\n <strong className='font-semibold text-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-md'>\n <div className='flex flex-col items-center gap-sm'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-full' />\n <div className='flex flex-col items-center gap-xs'>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n {formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\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-brand-secondary rounded-full p-2 shadow-md z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-sm'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-full' />\n <div className='flex flex-col items-center gap-xs'>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-bg-subtle dark:bg-bg-subtle-dark lg:!bg-bg-raised dark:lg:!bg-bg-raised-dark'\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 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, #EF4444 0%, #DC2626 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-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-md'>\n <div className='flex flex-col items-center gap-sm'>\n <img src={fromTokenIcon} alt={fromTokenSymbol} className='w-8 h-8 rounded-full' />\n <div className='flex flex-col items-center gap-xs'>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n ~{formattedInputAmount} {fromTokenSymbol}\n </div>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\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-brand-secondary rounded-full p-2 shadow-md z-10'>\n <MdOutlineSwapHoriz className='w-5 h-5' />\n </div>\n\n <div className='flex flex-col items-center gap-sm'>\n <img src={toTokenIcon} alt={toTokenSymbol} className='w-8 h-8 rounded-full' />\n <div className='flex flex-col items-center gap-xs'>\n <div className='text-text-sm-mobile font-poppins text-text-secondary dark:text-text-secondary-dark'>\n ~{formattedOutputAmount} {toTokenSymbol}\n </div>\n <div className='text-h2-mobile font-extrabold font-poppins text-text-primary dark:text-text-primary-dark'>\n {formattedOutputAmountUSD}\n </div>\n </div>\n </div>\n </div>\n </SectionCard>\n\n <TransactionProcessingDetails\n steps={transactionSteps}\n defaultOpen\n className='bg-bg-subtle dark:bg-bg-subtle-dark lg:!bg-bg-raised dark:lg:!bg-bg-raised-dark'\n labels={processingDetailsLabels}\n />\n </TransactionScreen>\n )\n}\n","import React from 'react'\nimport { ActionSheet } from '../action-sheet'\nimport { BackgroundContainer, Navbar } from '../layout'\nimport { CloseButton } from '../close-button'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { TextBody, TextHeading } from '../texts'\nimport { TertiaryButton } from '../buttons'\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 p-6 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-bg-subtle dark:bg-bg-subtle-dark lg:!bg-bg-raised lg:dark:!bg-bg-raised-dark'\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-2 w-full mt-4 overflow-y-auto flex-1 min-h-0'>\n {isFetching && (\n <div className='flex justify-center items-center w-full py-4'>\n <div className='flex items-center gap-1'>\n <TextBody variant='text-small' className='text-text-secondary dark:text-text-secondary-dark'>\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-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-4 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"]}
1
+ {"version":3,"sources":["../src/stories/buttons/action-button/ActionButton.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/stat-card/StatCard.tsx","../src/stories/segmented-control/SegmentedControl.tsx","../src/stories/blockchain-asset-selector/IconCircle.tsx","../src/stories/blockchain-asset-selector/CloseButton.tsx","../src/stories/blockchain-asset-selector/ChainRow.tsx","../src/stories/blockchain-asset-selector/ChainChip.tsx","../src/stories/blockchain-asset-selector/AssetRow.tsx","../src/stories/blockchain-asset-selector/SearchInput.tsx","../src/stories/blockchain-asset-selector/FilterGroupBar.tsx","../src/stories/blockchain-asset-selector/BlockchainAssetSelector.tsx","../src/stories/asset-list/AssetList.tsx","../src/stories/strategy-list/StrategyList.tsx","../src/stories/swap-panel/TokenIcon.tsx","../src/stories/swap-panel/PercentageChips.tsx","../src/stories/swap-panel/InlineNotification.tsx","../src/stories/swap-panel/TokenSelector.tsx","../src/stories/swap-panel/AmountInput.tsx","../src/stories/swap-panel/SwapDirectionButton.tsx","../src/stories/swap-panel/TokenInputCard.tsx","../src/stories/blockchain-asset-selector/tokens.ts","../src/stories/swap-panel/SwapFeedbackOverlay.tsx","../src/stories/swap-panel/SwapPanel.tsx","../src/stories/swap-panel/TransactionDetailRow.tsx","../src/stories/swap-panel/TransactionDetails.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-network-selector/SwapNetworkSelectorView.tsx","../src/stories/swap-quote-header/SwapQuoteHeaderView.tsx","../src/stories/swap-amount-input/SwapAmountInputView.tsx","../src/stories/swap-output-amount/SwapOutputAmountView.tsx","../src/stories/swap-quote-errors/SwapQuoteErrorsView.tsx","../src/stories/swap-slippage-tolerance-buttons/SwapSlippageToleranceButtonsView.tsx","../src/stories/swap-token-selector/SwapTokenSelectorView.tsx","../src/stories/swap-quote-blockchain-costs/SwapQuoteBlockchainCostsView.tsx","../src/stories/close-button/CloseButton.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-crosschain-processing-view/SwapCrossChainProcessingView.tsx","../src/stories/swap-signature-warning-view/SwapSignatureWarningView.tsx","../src/stories/swap-success-view/SwapSuccessView.tsx","../src/stories/swap-transaction-failed-view/SwapTransactionFailedView.tsx","../src/stories/choose-an-asset-swap-view/ChooseAnAssetSwapView.tsx","../src/stories/swap-form-view/SwapFormView.tsx","../src/stories/swap-from-card-view/SwapFromCardView.tsx","../src/stories/swap-to-card-view/SwapToCardView.tsx","../src/stories/swap-quote-details-view/SwapQuoteDetailsView.tsx","../src/stories/swap-advanced-settings-view/SwapAdvancedSettingsView.tsx","../src/stories/confirm-swap-button-view/ConfirmSwapButtonView.tsx"],"names":["twMerge","jsx","Input","jsxs","React","React2","React3","React4","React5","motion","React6","AnimatePresence","React7","MdInfoOutline","MdWarningAmber","MdErrorOutline","MdCheckCircleOutline","MdClose","React8","React9","React10","sizeClasses","React11","React12","React13","_a","React14","React15","Fragment","variantClasses","HiChevronUp","HiChevronDown","gapClasses","HiChevronLeft","TokenIcon","CloseButton","HiXMark","HiArrowRight","SearchInput","useState","useEffect","MdOutlineSearch","MdOutlineSearchOff","IoCheckmarkOutline","IoTimeOutline","IoAlertCircleOutline","textColorClass","MdOutlineSwapHoriz","MdHistory"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIe,SAAR,aAA+B,EAAA,EAMtB;AANsB,EAAA,IAAA,EAAA,GAAA,EAAA,EACpC;AAAA,IAAA,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,SAAA,GAAY,EAAA;AAAA,IACZ,IAAA,GAAO;AAAA,GART,GAIsC,EAAA,EAKjC,KAAA,GAAA,SAAA,CALiC,EAAA,EAKjC;AAAA,IAJH,UAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,gEAAA;AAAA,IACA,2CAAA;AAAA,IACA,2FAAA;AAAA,IACA,gDAAA;AAAA,IACA,mEAAA;AAAA,IACA,sMAAA;AAAA,IACA,sEAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,eAAe,QAAA,GACjB;AAAA,IACE,oBAAA;AAAA,IACA,8CAAA;AAAA,IACA;AAAA,GACF,CAAE,IAAA,CAAK,GAAG,CAAA,GACV;AAAA,IACE,gBAAA;AAAA,IACA,gDAAA;AAAA,IACA,4DAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEd,EAAA,MAAM,gBAAA,GAAmBA,qBAAA;AAAA,IACvB,WAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEC,cAAA;AAAA,IAAC,QAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,IAAA;AAAA,MACA,SAAA,EAAW,gBAAA;AAAA,MACX;AAAA,KAAA,EACI,KAAA,CAAA,EAJL;AAAA,MAME;AAAA,KAAA;AAAA,GACH;AAEJ;AChDe,SAAR,iBAAmC,EAAA,EAM1B;AAN0B,EAAA,IAAA,EAAA,GAAA,EAAA,EACxC;AAAA,IAAA,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,SAAA,GAAY,EAAA;AAAA,IACZ,IAAA,GAAO;AAAA,GART,GAI0C,EAAA,EAKrC,KAAA,GAAA,SAAA,CALqC,EAAA,EAKrC;AAAA,IAJH,UAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,gBAAA,GAAmBD,qBAAAA;AAAA,IACvB,gDAAA;AAAA,IACA,2FAAA;AAAA,IACA,gDAAA;AAAA,IACA,mEAAA;AAAA,IACA,sGAAA;AAAA,IACA,sMAAA;AAAA,IACA,gKAAA;AAAA,IACA,QAAA,IAAY,oBAAA;AAAA,IACZ;AAAA,GACF;AAEA,EAAA,uBACEC,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,IAAA;AAAA,MACA,SAAA,EAAW,gBAAA;AAAA,MACX;AAAA,KAAA,EACI,KAAA,CAAA,EAJL;AAAA,MAME;AAAA,KAAA;AAAA,GACH;AAEJ;AC7Be,SAAR,cAAgC,EAAA,EAMvB;AANuB,EAAA,IAAA,EAAA,GAAA,EAAA,EACrC;AAAA,IAAA,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,SAAA,GAAY,EAAA;AAAA,IACZ,IAAA,GAAO;AAAA,GART,GAIuC,EAAA,EAKlC,KAAA,GAAA,SAAA,CALkC,EAAA,EAKlC;AAAA,IAJH,UAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAIA,EAAA,MAAM,WAAA,GAAc;AAAA;AAAA,IAElB,qFAAA;AAAA;AAAA,IAEA,0CAAA;AAAA,IACA,gDAAA;AAAA,IACA,qDAAA;AAAA,IACA,0DAAA;AAAA;AAAA,IAEA,8CAAA;AAAA,IACA,8CAAA;AAAA;AAAA,IAEA,gDAAA;AAAA,IACA,mEAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe;AAAA;AAAA,IAEnB,OAAA,EAAS;AAAA,MACP,kBAAA;AAAA,MACA,iDAAA;AAAA,MACA,gDAAA;AAAA,MACA,2DAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG,CAAA;AAAA;AAAA,IAEV,QAAA,EAAU;AAAA,MACR,0DAAA;AAAA,MACA,yDAAA;AAAA,MACA,oEAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG;AAAA,GACZ;AAGA,EAAA,MAAM,aAAA,GAAgBD,qBAAAA;AAAA,IACpB,WAAA;AAAA,IACA,YAAA,CAAa,QAAA,GAAW,UAAA,GAAa,SAAS,CAAA;AAAA,IAC9C;AAAA,GACF;AAEA,EAAA,uBACEC,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,cAAA,EAAa,gBAAA;AAAA,MACb,YAAA,EAAW,gBAAA;AAAA,MACX,IAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MACX;AAAA,KAAA,EACI,KAAA,CAAA,EAPL;AAAA,MASE;AAAA,KAAA;AAAA,GACH;AAEJ;AC/De,SAAR,gBAAkC,EAAA,EAMzB;AANyB,EAAA,IAAA,EAAA,GAAA,EAAA,EACvC;AAAA,IAAA,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,SAAA,GAAY,EAAA;AAAA,IACZ,IAAA,GAAO;AAAA,GART,GAIyC,EAAA,EAKpC,KAAA,GAAA,SAAA,CALoC,EAAA,EAKpC;AAAA,IAJH,UAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAIA,EAAA,MAAM,WAAA,GAAc;AAAA;AAAA,IAElB,qFAAA;AAAA;AAAA,IAEA,0CAAA;AAAA,IACA,gDAAA;AAAA,IACA,qDAAA;AAAA,IACA,0DAAA;AAAA;AAAA,IAEA,8CAAA;AAAA,IACA,8CAAA;AAAA;AAAA,IAEA,gBAAA;AAAA,IACA,gDAAA;AAAA,IACA,mEAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAGV,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,OAAA,EAAS;AAAA,MACP,0DAAA;AAAA,MACA,6DAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG,CAAA;AAAA,IACV,QAAA,EAAU;AAAA,MACR,kEAAA;AAAA,MACA,sEAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG;AAAA,GACZ;AAGA,EAAA,MAAM,aAAA,GAAgBD,qBAAAA;AAAA,IACpB,WAAA;AAAA,IACA,YAAA,CAAa,QAAA,GAAW,UAAA,GAAa,SAAS,CAAA;AAAA,IAC9C;AAAA,GACF;AAEA,EAAA,uBACEC,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,cAAA,EAAa,kBAAA;AAAA,MACb,YAAA,EAAW,kBAAA;AAAA,MACX,IAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MACX;AAAA,KAAA,EACI,KAAA,CAAA,EAPL;AAAA,MASE;AAAA,KAAA;AAAA,GACH;AAEJ;AC7De,SAAR,eAAiC,EAAA,EAMxB;AANwB,EAAA,IAAA,EAAA,GAAA,EAAA,EACtC;AAAA,IAAA,QAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,SAAA,GAAY,EAAA;AAAA,IACZ,IAAA,GAAO;AAAA,GART,GAIwC,EAAA,EAKnC,KAAA,GAAA,SAAA,CALmC,EAAA,EAKnC;AAAA,IAJH,UAAA;AAAA,IACA,UAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAIA,EAAA,MAAM,WAAA,GAAc;AAAA;AAAA,IAElB,qFAAA;AAAA;AAAA,IAEA,0CAAA;AAAA,IACA,gDAAA;AAAA,IACA,qDAAA;AAAA,IACA,0DAAA;AAAA;AAAA,IAEA,8CAAA;AAAA,IACA,8CAAA;AAAA;AAAA,IAEA,4BAAA;AAAA,IACA,gDAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAGV,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,OAAA,EAAS;AAAA,MACP,yDAAA;AAAA,MACA,kBAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG,CAAA;AAAA,IACV,QAAA,EAAU;AAAA,MACR,iEAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG;AAAA,GACZ;AAGA,EAAA,MAAM,aAAA,GAAgBD,qBAAAA;AAAA,IACpB,WAAA;AAAA,IACA,YAAA,CAAa,QAAA,GAAW,UAAA,GAAa,SAAS,CAAA;AAAA,IAC9C;AAAA,GACF;AAEA,EAAA,uBACEC,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAa,iBAAA;AAAA,MACb,YAAA,EAAW,iBAAA;AAAA,MACX,IAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MACX;AAAA,KAAA,EACI,KAAA,CAAA,EAPL;AAAA,MASE;AAAA,KAAA;AAAA,GACH;AAEJ;ACzDO,SAAS,MAAO,EAAA,EAA0C;AAA1C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,cAAY,EAAA,EALrC,GAKuB,EAAA,EAAqB,KAAA,GAAA,SAAA,CAArB,IAAqB,CAAnB,WAAA,CAAA,CAAA;AACvB,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,eAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,cAAA,EAAa,OAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS;AAAA,KAAA,EACrC,KAAA;AAAA,GACN;AAEJ;AAEO,SAAS,WAAY,EAAA,EAAuD;AAAvD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,cAAY,EAAA,EArB1C,GAqB4B,EAAA,EAAqB,KAAA,GAAA,SAAA,CAArB,IAAqB,CAAnB,WAAA,CAAA,CAAA;AAC5B,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,iDAAA;AAAA,IACA,gDAAA;AAAA,IACA,wDAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEC,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,cAAA,EAAa,aAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS;AAAA,KAAA,EACrC,KAAA;AAAA,GACN;AAEJ;AAMO,SAAS,WAAY,EAAA,EAA2E;AAA3E,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,QAAA,GAAW,KAAA,EAAO,QAAA,EAAU,SAAA,GAAY,EAAA,EA3CtE,GA2C4B,EAAA,EAAiD,KAAA,GAAA,SAAA,CAAjD,EAAA,EAAiD,CAA/C,UAAA,EAAkB,UAAA,EAAU,WAAA,CAAA,CAAA;AACxD,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,QAAA;AAAA,IACA,iDAAA;AAAA,IACA,gDAAA;AAAA,IACA,yDAAA;AAAA,IACA,iDAAA;AAAA,IACA,+DAAA;AAAA,IACA,sDAAA;AAAA,IACA,gDAAA;AAAA,IACA,8CAAA;AAAA,IACA,8CAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,KAAA,EAAO,yDAAA;AAAA,IACP,QAAA,EAAU;AAAA,MACR,QAAA;AAAA,MACA,8DAAA;AAAA,MACA,YAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG,CAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,QAAA,GAAW,QAAA,GAAW,OAAA,GAAU,QAAA,GAAW,UAAA,GAAa,SAAA;AAC9D,EAAA,MAAM,eAAeA,qBAAAA,CAAQ,WAAA,EAAa,YAAA,CAAa,QAAQ,GAAG,SAAS,CAAA;AAE3E,EAAA,uBACEC,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,aAAA;AAAA,MACV,cAAA,EAAa,aAAA;AAAA,MACb,gBAAc,QAAA,IAAY,MAAA;AAAA,MAC1B,QAAA;AAAA,MACA,SAAA,EAAW;AAAA,KAAA,EACP,KAAA;AAAA,GACN;AAEJ;AChFO,SAAS,KAAM,EAAA,EAUR;AAVQ,EAAA,IAAA,EAAA,GAAA,EAAA,EACpB;AAAA,IAAA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,SAAA,GAAY,EAAA;AAAA,IACZ,MAAA,GAAS,QAAA;AAAA,IACT,QAAA,GAAW,KAAA;AAAA,IACX,QAAA,EAAU,SAAA;AAAA,IACV,OAAA,EAAS,QAAA;AAAA,IACT,MAAA,EAAQ;AAAA,GAXV,GAGsB,EAAA,EASjB,KAAA,GAAA,SAAA,CATiB,EAAA,EASjB;AAAA,IARH,UAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,iDAAA;AAAA,IACA,gDAAA;AAAA,IACA,wDAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,OAAA,EAAS;AAAA,MACP,wDAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG,CAAA;AAAA,IACV,QAAA,EAAU;AAAA,MACR,2DAAA;AAAA,MACA,oBAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG;AAAA,GACZ;AAEA,EAAA,MAAM,WAAA,GAAcD,qBAAAA;AAAA,IAClB,WAAA;AAAA,IACA,YAAA,CAAa,QAAA,GAAW,UAAA,GAAa,SAAS,CAAA;AAAA,IAC9C;AAAA,GACF;AAEA,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,uBACEC,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,MAAA;AAAA,QACV,cAAA,EAAa,MAAA;AAAA,QACb,eAAA,EAAa,IAAA;AAAA,QACb,SAAA,EAAW,WAAA;AAAA,QAEV;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,IAAA;AAAA,MACA,MAAA;AAAA,MACA,WAAA,EAAU,MAAA;AAAA,MACV,cAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,WAAA;AAAA,MACX,GAAA,EAAK,MAAA,KAAW,QAAA,GAAW,qBAAA,GAAwB;AAAA,KAAA,EAC/C,KAAA,CAAA,EAPL;AAAA,MASE;AAAA,KAAA;AAAA,GACH;AAEJ;AAEA,IAAO,YAAA,GAAQ,IAAA;AChER,SAASC,OAAO,EAAA,EAUR;AAVQ,EAAA,IAAA,EAAA,GAAA,EAAA,EACrB;AAAA,IAAA,KAAA;AAAA,IACA,KAAA;AAAA,IACA,WAAA;AAAA,IACA,IAAA,GAAO,MAAA;AAAA,IACP,UAAA,GAAa,kBAAA;AAAA,IACb,IAAA,GAAO,GAAA;AAAA,IACP,QAAA;AAAA,IACA,SAAA,GAAY;AAAA,GAZd,GAIuB,EAAA,EASlB,KAAA,GAAA,SAAA,CATkB,EAAA,EASlB;AAAA,IARH,OAAA;AAAA,IACA,OAAA;AAAA,IACA,aAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,QAAA,GAAW,CAAC,CAAC,KAAA;AAEnB,EAAA,uBACEC,eAAA,CAAC,SAAU,SAAA,EACR,QAAA,EAAA;AAAA,IAAA,KAAA,oBAASF,cAAAA,CAAC,UAAA,EAAA,EAAY,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,oBAC7BA,cAAAA;AAAA,MAAC,UAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,IAAA;AAAA,QACA,WAAA;AAAA,QACA,QAAA;AAAA,QACA,QAAA;AAAA,QACA,YAAA,EAAY;AAAA,OAAA,EACR,KAAA;AAAA,KACN;AAAA,IACC,IAAA,KAAS,8BACRA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,WAAA,EAAU,kBAAA;AAAA,QACV,cAAA,EAAa,kBAAA;AAAA,QACb,SAAA,EAAU,YAAA;AAAA,QAEV,QAAA,kBAAAA,cAAAA,CAAC,YAAA,EAAA,EAAK,IAAA,EAAY,UACf,QAAA,EAAA,UAAA,EACH;AAAA;AAAA,KACF;AAAA,IAED,yBACCA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,kMACV,QAAA,EAAA,KAAA,EACH;AAAA,GAAA,EAEJ,CAAA;AAEJ;AC3CO,SAAS,SAAU,EAAA,EAMR;AANQ,EAAA,IAAA,EAAA,GAAA,EAAA,CAAA,CACxB;AAAA,IAAA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,kBAAA;AAAA,IACA;AAAA,GAPF,GAG0B,EAAA,CAAA,CAKrB,SAAA,CALqB,EAAA,EAKrB;AAAA,IAJH,UAAA;AAAA,IACA,WAAA;AAAA,IACA,oBAAA;AAAA,IACA;AAAA,GAAA;AAGA,EAAA,MAAM,gBAAA,GAAmBD,qBAAAA;AAAA,IACvB,kJAAA;AAAA,IACA,mHAAA;AAAA,IACA,+GAAA;AAAA,IACA,OAAA,IAAW,gBAAA;AAAA,IACX;AAAA,GACF;AAEA,EAAA,uBACEC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,gBAAA,EAAkB,SAChC,QAAA,kBAAAA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWD,qBAAAA;AAAA,QACT,uDAAA;AAAA,QACA,yCAAA;AAAA,QACA,2FAAA;AAAA,QACA,uDAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEC;AAAA;AAAA,GACH,EACF,CAAA;AAEJ;ACdO,SAAS,iBAAkB,EAAA,EAA0D;AAA1D,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,YAAU,SAAA,EAnB9C,GAmBkC,IAA0B,KAAA,GAAA,SAAA,CAA1B,EAAA,EAA0B,CAAxB,UAAA,EAAU,WAAA,CAAA,CAAA;AAC5C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,kCAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,cAAA,EAAa,qBAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS;AAAA,KAAA,EACrC,KAAA,CAAA,EAJL;AAAA,MAME;AAAA,KAAA;AAAA,GACH;AAEJ;AAEO,SAAS,gBAAiB,EAAA,EAAyD;AAAzD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,YAAU,SAAA,EArC7C,GAqCiC,IAA0B,KAAA,GAAA,SAAA,CAA1B,EAAA,EAA0B,CAAxB,UAAA,EAAU,WAAA,CAAA,CAAA;AAC3C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,qFAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAa,mBAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS;AAAA,KAAA,EACrC,KAAA,CAAA,EAJL;AAAA,MAME;AAAA,KAAA;AAAA,GACH;AAEJ;AAEO,SAAS,kBAAmB,EAAA,EAA2D;AAA3D,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,YAAU,SAAA,EAvD/C,GAuDmC,IAA0B,KAAA,GAAA,SAAA,CAA1B,EAAA,EAA0B,CAAxB,UAAA,EAAU,WAAA,CAAA,CAAA;AAC7C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,uCAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,cAAA,EAAa,sBAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS;AAAA,KAAA,EACrC,KAAA,CAAA,EAJL;AAAA,MAME;AAAA,KAAA;AAAA,GACH;AAEJ;AC1De,SAAR,mBAAA,CAAsC;AAAA,EAC3C,QAAA;AAAA,EACA;AACF,CAAA,EAA6B;AAC3B,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,SAAA,EAAWD,qBAAAA,CAAQ,8DAAA,EAAgE,SAAS,CAAA;AAAA,MAE3F;AAAA;AAAA,GACH;AAEJ;ACfe,SAAR,UAAA,CAA6B;AAAA,EAClC,EAAA;AAAA,EACA,IAAA;AAAA,EACA,IAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAAoB;AAClB,EAAA,uBACEG,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MAEC,WAAA,EAAU,aAAA;AAAA,MACV,cAAA,EAAa,aAAA;AAAA,MACb,YAAA,EAAY,WAAW,IAAI,CAAA,OAAA,CAAA;AAAA,MAC3B,OAAA;AAAA,MACA,SAAA,EAAWH,qBAAAA;AAAA,QACT,4JAAA;AAAA,QACA,kHAAA;AAAA,QACA,gDAAA;AAAA,QACA,kHAAA;AAAA,QACA,mDAAA;AAAA,QACA,uCAAA;AAAA,QACA,0CAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,kBAAA;AAAA,YACV,cAAA,EAAa,kBAAA;AAAA,YACb,SAAA,EAAU,sHAAA;AAAA,YAET,QAAA,EAAA,OAAO,IAAA,KAAS,QAAA,mBAEbA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,GAAA,EAAK,IAAA;AAAA,gBACL,GAAA,EAAK,IAAA;AAAA,gBACL,SAAA,EAAU;AAAA;AAAA,aACZ,GAGE;AAAA;AAAA,SAER;AAAA,wBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yKACZ,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,wBAEAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,qBAAA;AAAA,YACV,cAAA,EAAa,qBAAA;AAAA,YACb,IAAA,EAAK,MAAA;AAAA,YACL,aAAA,EAAY,MAAA;AAAA,YACZ,SAAA,EAAU,4DAAA;AAAA,YAEV,QAAA,kBAAAA,cAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,CAAA,EAAE,uBAAA;AAAA,gBACF,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,KAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA;AACF;AAAA,KAAA;AAAA,IApDK;AAAA,GAqDP;AAEJ;AC3Ce,SAAR,iBAAA,CAAoC;AAAA,EACzC,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAA2B;AACzB,EAAA,uBACEE,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAWH,qBAAAA,CAAQ,8DAAA,EAAgE,SAAS,CAAA;AAAA,MAE1F,QAAA,EAAA;AAAA,QAAA,CAAA,KAAA,IAAS,QAAQ,QAAA,IAAY,IAAA,qBAC7BG,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,uDAAA,EACZ,QAAA,EAAA;AAAA,UAAA,KAAA,IAAS,wBACRF,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,kLACX,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,UAED,YAAY,IAAA,oBACXA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8HACV,QAAA,EAAA,QAAA,EACH;AAAA,SAAA,EAEJ,CAAA;AAAA,wBAEFA,cAAAA,CAAC,mBAAA,EAAA,EACE,kBAAQ,GAAA,CAAI,CAAC,2BACZA,cAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YAEC,IAAI,MAAA,CAAO,EAAA;AAAA,YACX,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,SAAS,MAAG;AA/DxB,cAAA,IAAA,EAAA;AA+D2B,cAAA,OAAA,CAAA,EAAA,GAAA,MAAA,CAAO,OAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA;AAAA,YAAA;AAAA,WAAA;AAAA,UAJV,MAAA,CAAO;AAAA,SAMf,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;ACzCO,SAAS,kBAAA,CAAoB;AAAA,EAClC,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,uBACEE,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,cAAA,EAAa,sBAAA;AAAA,MACb,SAAA,EAAWH,qBAAAA;AAAA,QACT,wJAAA;AAAA,QACA,kHAAA;AAAA,QACA,gDAAA;AAAA,QACA,0CAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAAA,EACb,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,6JAAA,EACX,kCAAS,mBAAA,EACZ,CAAA;AAAA,UACC,OAAA,IAAW,wBACVA,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,WAAA,EAAU,sBAAA;AAAA,cACV,cAAA,EAAa,sBAAA;AAAA,cACb,OAAA,EAAS,OAAA;AAAA,cACT,SAAA,EAAWD,qBAAAA;AAAA,gBACT,yIAAA;AAAA,gBACA,4FAAA;AAAA,gBACA,sJAAA;AAAA,gBACA;AAAA,eACF;AAAA,cACD,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EAEJ,CAAA;AAAA,wBAGAC,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iJAAA,EACV,wCAAY,8CAAA,EACf,CAAA;AAAA,wBAGAA,cAAAA,CAAC,mBAAA,EAAA,EACE,kBAAQ,GAAA,CAAI,CAAC,2BACZA,cAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YAEC,IAAI,MAAA,CAAO,EAAA;AAAA,YACX,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,MAAM,MAAA,CAAO,IAAA;AAAA,YACb,SAAS,MAAG;AAnFxB,cAAA,IAAA,EAAA;AAmF2B,cAAA,OAAA,CAAA,EAAA,GAAA,MAAA,CAAO,OAAA,KAAP,IAAA,GAAA,MAAA,GAAA,EAAA,CAAA,IAAA,CAAA,MAAA,CAAA;AAAA,YAAA;AAAA,WAAA;AAAA,UAJV,MAAA,CAAO;AAAA,SAMf,CAAA,EACH;AAAA;AAAA;AAAA,GACF;AAEJ;ACrFA,IAAM,eAAA,GAAkB;AAAA,EACtB,OAAA,EAAS;AAAA,IACP,GAAA,EAAK,GAAA;AAAA,IACL,GAAA,EAAK,IAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,GAAA,EAAK,QAAA;AAAA,IACL,IAAA,EAAM,GAAA;AAAA,IACN,IAAA,EAAM;AAAA,GACR;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,GAAA,EAAK,KAAA;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,IAAA,EAAM;AAAA;AAEV,CAAA;AAGA,IAAM,YAAA,GAAe;AAAA,EACnB,SAAA,EAAW;AAAA,IACT,IAAA,EAAM,aAAA;AAAA,IACN,MAAA,EAAQ,cAAA;AAAA,IACR,KAAA,EAAO;AAAA,GACT;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,EAAA,EAAI;AAAA,MACF,OAAA,EAAS,sGAAA;AAAA,MACT,SAAA,EAAW,oGAAA;AAAA,MACX,GAAA,EAAK;AAAA,KACP;AAAA,IACA,EAAA,EAAI;AAAA,MACF,OAAA,EAAS,sGAAA;AAAA,MACT,SAAA,EAAW,oGAAA;AAAA,MACX,GAAA,EAAK;AAAA,KACP;AAAA,IACA,EAAA,EAAI;AAAA,MACF,OAAA,EAAS,sGAAA;AAAA,MACT,SAAA,EAAW,sGAAA;AAAA,MACX,GAAA,EAAK;AAAA;AACP;AAEJ,CAAA;AAGe,SAAR,SAA2B,KAAA,EAAkC;AApDpE,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAsDE,EAAA,MAAM,eAAA,GAIJ,cAAc,KAAA,GACV;AAAA,IACE,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,QAAA,EAAU,KAAA;AAAA,IACV,iBAAiB,KAAA,CAAM,QAAA;AAAA,IACvB,iBAAA,EAAmB,MAAA;AAAA,IACnB,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,CAAM,KAAA,KAAN,IAAA,GAAA,EAAA,GAAe,OAAA;AAAA,IACtB,IAAA,EAAA,CAAM,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,EAAA,GAAc,IAAA;AAAA,IACpB,UAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAW,KAAA;AAAA,IACX,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,CAAM,SAAA,KAAN,IAAA,GAAA,EAAA,GAAmB;AAAA,GAChC,GACA;AAAA,IACE,QAAQ,KAAA,CAAM,MAAA;AAAA,IACd,QAAA,EAAA,CAAU,EAAA,GAAA,KAAA,CAAM,QAAA,KAAN,IAAA,GAAA,EAAA,GAAkB,KAAA;AAAA,IAC5B,iBAAiB,KAAA,CAAM,eAAA;AAAA,IACvB,mBAAmB,KAAA,CAAM,iBAAA;AAAA,IACzB,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,CAAM,KAAA,KAAN,IAAA,GAAA,EAAA,GAAe,OAAA;AAAA,IACtB,IAAA,EAAA,CAAM,EAAA,GAAA,KAAA,CAAM,IAAA,KAAN,IAAA,GAAA,EAAA,GAAc,IAAA;AAAA,IACpB,UAAA,EAAA,CAAY,EAAA,GAAA,KAAA,CAAM,UAAA,KAAN,IAAA,GAAA,EAAA,GAAoB,IAAA;AAAA,IAChC,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,CAAM,SAAA,KAAN,IAAA,GAAA,EAAA,GAAmB,KAAA;AAAA,IAC9B,SAAA,EAAA,CAAW,EAAA,GAAA,KAAA,CAAM,SAAA,KAAN,IAAA,GAAA,EAAA,GAAmB;AAAA,GAChC;AAEN,EAAA,MAAM;AAAA,IACJ,MAAA;AAAA,IACA,QAAA;AAAA,IACA,eAAA;AAAA,IACA,iBAAA;AAAA,IACA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,GACF,GAAI,eAAA;AAGJ,EAAA,MAAM,YAAA,GAAe,CACnB,KAAA,EACA,IAAA,EACA,aAAA,KACW;AACX,IAAA,IAAI,CAAC,aAAA,IAAiB,CAAC,SAAA,EAAW,OAAO,KAAA;AAEzC,IAAA,MAAM,MAAA,GAAS,aAAA,GAAgB,eAAA,CAAgB,OAAA,CAAQ,IAAI,CAAA,GAAI,EAAA;AAC/D,IAAA,MAAM,QAAQ,SAAA,GAAY,CAAA,CAAA,EAAI,gBAAgB,MAAA,CAAO,IAAI,CAAC,CAAA,CAAA,GAAK,EAAA;AAG/D,IAAA,IACE,CAAC,KAAA,EAAO,KAAK,CAAA,CAAE,QAAA,CAAS,IAAI,CAAA,IAC5B,CAAC,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,IACnB,CAAC,KAAA,CAAM,QAAA,CAAS,GAAG,CAAA,EACnB;AACA,MAAA,OAAO,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,GAAG,KAAK,CAAA,CAAA;AAAA,IAClC;AAEA,IAAA,OAAO,GAAG,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,EAAG,KAAK,GAAG,IAAA,EAAK;AAAA,EAC3C,CAAA;AAEA,EAAA,uBACEE,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWH,qBAAAA;AAAA,QACT,eAAA;AAAA,QACA,YAAA,CAAa,UAAU,KAAK,CAAA;AAAA,QAC5B,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,CAAE,GAAA;AAAA,QACxB;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWD,qBAAAA;AAAA,cACT,qJAAA;AAAA,cACA,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,CAAE;AAAA,aAC1B;AAAA,YAEC,QAAA,EAAA,YAAA,CAAa,MAAA,EAAQ,QAAA,EAAU,UAAU;AAAA;AAAA,SAC5C;AAAA,QAGC,mCACCC,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWD,qBAAAA;AAAA,cACT,kGAAA;AAAA,cACA,YAAA,CAAa,IAAA,CAAK,IAAI,CAAA,CAAE;AAAA,aAC1B;AAAA,YAEC,QAAA,EAAA,iBAAA,GACG,YAAA,CAAa,eAAA,EAAiB,iBAAA,EAAmB,IAAI,CAAA,GACrD;AAAA;AAAA;AACN;AAAA;AAAA,GAEJ;AAEJ;AC3IA,IAAM,IAAA,GAAaI,iBAAA,CAAA,UAAA;AAAA,EACjB,CAAC,IAMD,GAAA,KACK;AAPJ,IAAA,IAAA,EAAA,GAAA,EAAA,EACC;AAAA,MAAA,QAAA;AAAA,MACA,IAAI,SAAA,GAAY,GAAA;AAAA,MAChB,SAAA,GAAY;AAAA,KAhBhB,GAaG,EAAA,EAII,KAAA,GAAA,SAAA,CAJJ,EAAA,EAII;AAAA,MAHH,UAAA;AAAA,MACA,IAAA;AAAA,MACA;AAAA,KAAA,CAAA;AAKA,IAAA,MAAM,WAAA,GAAc;AAAA,MAClB,iDAAA;AAAA,MACA,gDAAA;AAAA,MACA,qDAAA;AAAA,MACA,yDAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG,CAAA;AAEV,IAAA,MAAM,WAAA,GAAcJ,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA;AAElD,IAAA,OAAaI,iBAAA,CAAA,aAAA;AAAA,MACX,SAAA;AAAA,MACA,cAAA,CAAA;AAAA,QACE,GAAA;AAAA,QACA,SAAA,EAAW;AAAA,OAAA,EACR,KAAA,CAAA;AAAA,MAEL;AAAA,KACF;AAAA,EACF;AACF,CAAA;AAEA,IAAA,CAAK,WAAA,GAAc,MAAA;AACnB,IAAO,YAAA,GAAQ;ACvCR,IAAM,UAAA,GAAmBC,iBAAA,CAAA,UAAA;AAAA,EAC9B,CAAC,IAMD,GAAA,KACK;AAPJ,IAAA,IAAA,EAAA,GAAA,EAAA,EACC;AAAA,MAAA,EAAA,GAAK,MAAA;AAAA,MACL,OAAA,GAAU,eAAA;AAAA,MACV,SAAA,GAAY;AAAA,KAThB,GAMG,EAAA,EAII,KAAA,GAAA,SAAA,CAJJ,EAAA,EAII;AAAA,MAHH,IAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KAAA,CAAA;AAKA,IAAA,MAAM,cAAA,GAAiB;AAAA,MACrB,cAAA,EAAgB;AAAA,QACd,gDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,eAAA,EAAiB;AAAA,QACf,gDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,cAAA,EAAgB;AAAA,QACd,gDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG;AAAA,KACZ;AAGA,IAAA,MAAM,YAAA,GAAe,eAAe,OAAwB,CAAA;AAC5D,IAAA,MAAM,aAAA,GAAgBL,qBAAAA,CAAQ,YAAA,EAAc,SAAS,CAAA;AAErD,IAAA,uBACEC,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,EAAA;AAAA,QACA,SAAA,EAAW,aAAA;AAAA,QACX,WAAA,EAAU,aAAA;AAAA,QACV,cAAA,EAAa;AAAA,OAAA,EACT,KAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AC5ClB,IAAM,QAAA,GAAiBK,iBAAA,CAAA,UAAA;AAAA,EAC5B,CAAC,IAMD,GAAA,KACK;AAPJ,IAAA,IAAA,EAAA,GAAA,EAAA,EACC;AAAA,MAAA,EAAA,GAAK,GAAA;AAAA,MACL,OAAA,GAAU,aAAA;AAAA,MACV,SAAA,GAAY;AAAA,KAThB,GAMG,EAAA,EAII,KAAA,GAAA,SAAA,CAJJ,EAAA,EAII;AAAA,MAHH,IAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KAAA,CAAA;AAKA,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,oGAAA,EAAsG;AAAA,QACpG,gDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,YAAA,EAAc;AAAA,QACZ,gDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,aAAA,EAAe;AAAA,QACb,gDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,YAAA,EAAc;AAAA,QACZ,gDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG;AAAA,KACZ;AAGA,IAAA,MAAM,YAAA,GAAe,aAAa,OAAsB,CAAA;AACxD,IAAA,MAAM,WAAA,GAAcN,qBAAAA,CAAQ,YAAA,EAAc,SAAS,CAAA;AAEnD,IAAA,uBACEC,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,EAAA;AAAA,QACA,SAAA,EAAW,WAAA;AAAA,QACX,WAAA,EAAU,WAAA;AAAA,QACV,cAAA,EAAa;AAAA,OAAA,EACT,KAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;ACjDhB,IAAM,WAAA,GAAoBM,iBAAA,CAAA,UAAA;AAAA,EAC/B,CAAC,IAKE,GAAA,KAAQ;AALV,IAAA,IAAA,EAAA,GAAA,EAAA,EACC;AAAA,MAAA,EAAA;AAAA,MACA,OAAA,GAAU,IAAA;AAAA,MACV,SAAA,GAAY;AAAA,KAThB,GAMG,EAAA,EAII,KAAA,GAAA,SAAA,CAJJ,EAAA,EAII;AAAA,MAHH,IAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KAAA,CAAA;AAGA,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,SAAA,EAAW;AAAA,QACT,iDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,EAAA,EAAI;AAAA,QACF,iDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,EAAA,EAAI;AAAA,QACF,iDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,EAAA,EAAI;AAAA,QACF,gDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,EAAA,EAAI;AAAA,QACF,gDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG,CAAA;AAAA,MACV,EAAA,EAAI;AAAA,QACF,gDAAA;AAAA,QACA,qDAAA;AAAA,QACA;AAAA,OACF,CAAE,KAAK,GAAG;AAAA,KACZ;AAGA,IAAA,MAAM,YAAA,GAAe,gBAAgB,OAAyB,CAAA;AAC9D,IAAA,MAAM,cAAA,GAAiBP,qBAAAA,CAAQ,YAAA,EAAc,SAAS,CAAA;AAEtD,IAAA,uBACEC,cAAAA;AAAA,MAAC,YAAA;AAAA,MAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,EAAA,EAAK,OAAA,KAAY,SAAA,GAAY,IAAA,GAAO,OAAA;AAAA,QACpC,SAAA,EAAW,cAAA;AAAA,QACX,WAAA,EAAU,cAAA;AAAA,QACV,cAAA,EAAa;AAAA,OAAA,EACT,KAAA;AAAA,KACN;AAAA,EAEJ;AACF;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;AAC1B,IAAO,mBAAA,GAAQ,WAAA;ACxDA,SAAR,MAAwB,EAAA,EAIV;AAJU,EAAA,IAAA,EAAA,GAAA,EAAA,EAC7B;AAAA,IAAA,OAAA,GAAU,IAAA;AAAA,IACV,SAAA,GAAY;AAAA,GATd,GAO+B,EAAA,EAG1B,KAAA,GAAA,SAAA,CAH0B,EAAA,EAG1B;AAAA,IAFH,SAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBAAOA,cAAAA,CAAC,mBAAA,EAAA,cAAA,CAAA,EAAY,OAAA,EAAkB,aAA0B,KAAA,CAAO,CAAA;AACzE;ACGA,IAAM,WAAA,GAAoBO,iBAAA,CAAA,aAAA;AAAA,EACxB;AACF,CAAA;AAEA,IAAM,UAAU,MAAM;AACpB,EAAA,MAAM,GAAA,GAAYA,6BAAW,WAAW,CAAA;AACxC,EAAA,IAAI,CAAC,GAAA,EAAK;AAAE,IAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,EAAE;AACrF,EAAA,OAAO,GAAA;AACT,CAAA;AAaO,IAAM,IAAA,GAAaA,iBAAA,CAAA,UAAA;AAAA,EACxB,CACE,IASA,GAAA,KACG;AAVH,IAAA,IAAA,EAAA,GAAA,EAAA,EACE;AAAA,MAAA,KAAA,EAAO,eAAA;AAAA,MACP,YAAA,GAAe,EAAA;AAAA,MACf,aAAA;AAAA,MACA,OAAA,GAAU,WAAA;AAAA,MACV,SAAA;AAAA,MACA;AAAA,KA7CN,GAuCI,EAAA,EAOK,KAAA,GAAA,SAAA,CAPL,EAAA,EAOK;AAAA,MANH,OAAA;AAAA,MACA,cAAA;AAAA,MACA,eAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KAAA,CAAA;AAKF,IAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUA,2BAAS,YAAY,CAAA;AAC3D,IAAA,MAAM,eAAe,eAAA,KAAoB,MAAA;AACzC,IAAA,MAAM,WAAA,GAAc,eAAe,eAAA,GAAkB,QAAA;AAErD,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAc;AAClC,MAAA,IAAI,CAAC,YAAA,EAAc,WAAA,CAAY,CAAC,CAAA;AAChC,MAAA,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAgB,CAAA,CAAA;AAAA,IAClB,CAAA;AAEA,IAAA,uBACEP,cAAAA;AAAA,MAAC,WAAA,CAAY,QAAA;AAAA,MAAZ;AAAA,QACC,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,WAAA;AAAA,UACP,aAAA,EAAe,YAAA;AAAA,UACf;AAAA,SACF;AAAA,QAEA,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,aAAA,CAAA,cAAA,CAAA,EAAI,GAAA,EAAU,SAAA,EAAWD,qBAAAA,CAAQ,QAAA,EAAU,SAAS,CAAA,EAAA,EAAO,KAAA,CAAA,EAA3D,EACE,QAAA,EAAA,CACH;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AACA,IAAA,CAAK,WAAA,GAAc,MAAA;AAQZ,IAAM,QAAA,GAAiBQ,iBAAA,CAAA,UAAA;AAAA,EAC5B,CAAC,IAAmC,GAAA,KAAQ;AAA3C,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,aAAW,QAAA,EAnFhB,GAmFG,IAA0B,KAAA,GAAA,SAAA,CAA1B,EAAA,EAA0B,CAAxB,WAAA,EAAW,UAAA,CAAA,CAAA;AACZ,IAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,OAAA,EAAQ;AAE5B,IAAA,IAAI,YAAY,QAAA,EAAU;AACxB,MAAA,uBACEP,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA,aAAA,CAAA,cAAA,CAAA;AAAA,UACC,GAAA;AAAA,UACA,IAAA,EAAK,SAAA;AAAA,UACL,SAAA,EAAWD,qBAAAA;AAAA,YACT,mDAAA;AAAA,YACA,8CAAA;AAAA,YACA,8CAAA;AAAA,YACA,6CAAA;AAAA,YACA;AAAA;AACF,SAAA,EACI,KAAA,CAAA,EAVL;AAAA,UAYE;AAAA,SAAA;AAAA,OACH;AAAA,IAEJ;AAEA,IAAA,uBACEC,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA,aAAA,CAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAWD,qBAAAA;AAAA,UACT,uHAAA;AAAA,UACA,OAAA,KAAY,YAAY,kDAAA,GAAqD,MAAA;AAAA,UAC7E;AAAA;AACF,OAAA,EACI,KAAA,CAAA,EARL;AAAA,QAUE;AAAA,OAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,QAAA,CAAS,WAAA,GAAc,UAAA;AAYhB,IAAM,WAAA,GAAoBQ,iBAAA,CAAA,UAAA;AAAA,EAC/B,CACE,IAMA,GAAA,KACG;AAPH,IAAA,IAAA,EAAA,GAAA,EAAA,EACE;AAAA,MAAA,KAAA;AAAA,MACA,SAAA;AAAA,MACA;AAAA,KA1IN,GAuII,EAAA,EAIK,KAAA,GAAA,SAAA,CAJL,EAAA,EAIK;AAAA,MAHH,OAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA,KAAA,CAAA;AAKF,IAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,aAAA,EAAe,OAAA,KAAY,OAAA,EAAQ;AAC/D,IAAA,MAAM,WAAW,WAAA,KAAgB,KAAA;AAEjC,IAAA,uBACEL,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA,aAAA,CAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,KAAA;AAAA,QACL,eAAA,EAAe,QAAA;AAAA,QACf,OAAA,EAAS,MAAM,aAAA,CAAc,KAAK,CAAA;AAAA,QAClC,SAAA,EAAWH,qBAAAA;AAAA,UACT,qNAAA;AAAA,UACA,OAAA,KAAY,QAAA,GACR,6JAAA,GACA,OAAA,KAAY,YACV,uTAAA,GACA,kIAAA;AAAA,UACN,YAAY,QAAA,GACP,QAAA,GAAW,wDAAA,GAA2D,yDAAA,GACtE,WAAW,wDAAA,GAA2D,qHAAA;AAAA,UAC3E;AAAA;AACF,OAAA,EACI,KAAA,CAAA,EAjBL;AAAA,QAmBC,QAAA,EAAA;AAAA,0BAAAC,cAAAA,CAAC,UAAM,QAAA,EAAS,CAAA;AAAA,UACf,QAAA,IAAY,OAAA,KAAY,QAAA,oBACvBA,cAAAA;AAAA,YAACQ,mBAAA,CAAO,IAAA;AAAA,YAAP;AAAA,cACC,QAAA,EAAS,sBAAA;AAAA,cACT,SAAA,EAAU,4JAAA;AAAA,cACV,YAAY,EAAE,IAAA,EAAM,UAAU,MAAA,EAAQ,GAAA,EAAK,UAAU,GAAA;AAAI;AAAA,WAC3D;AAAA,UAED,QAAA,IAAY,OAAA,KAAY,QAAA,oBACvBR,cAAAA;AAAA,YAACQ,mBAAA,CAAO,IAAA;AAAA,YAAP;AAAA,cACC,QAAA,EAAS,eAAA;AAAA,cACT,SAAA,EAAU,4FAAA;AAAA,cACV,YAAY,EAAE,IAAA,EAAM,UAAU,MAAA,EAAQ,GAAA,EAAK,UAAU,GAAA;AAAI;AAAA;AAC3D;AAAA,OAAA;AAAA,KAEJ;AAAA,EAEJ;AACF;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AAUnB,IAAM,WAAA,GAAoBD,iBAAA,CAAA,UAAA;AAAA,EAC/B,CAAC,IAA0C,GAAA,KAAQ;AAAlD,IAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,KAAA,EAAO,WAAW,QAAA,EApMvB,GAoMG,IAAiC,KAAA,GAAA,SAAA,CAAjC,EAAA,EAAiC,CAA/B,OAAA,EAAO,WAAA,EAAW,UAAA,CAAA,CAAA;AACnB,IAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAa,OAAA,KAAY,OAAA,EAAQ;AAChD,IAAA,IAAI,WAAA,KAAgB,OAAO,OAAO,IAAA;AAElC,IAAA,uBACEP,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA,aAAA,CAAA,cAAA,CAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,UAAA;AAAA,QACL,SAAA,EAAWD,qBAAAA;AAAA,UACT,4BAAA;AAAA,UACA,OAAA,KAAY,SAAA,IAAa,OAAA,KAAY,QAAA,GAAW,0CAAA,GAA6C,wCAAA;AAAA,UAC7F;AAAA;AACF,OAAA,EACI,KAAA,CAAA,EARL;AAAA,QAUE;AAAA,OAAA;AAAA,KACH;AAAA,EAEJ;AACF;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AClK1B,IAAM,eAAA,GAAoD,CAAC,EAAE,SAAA,uBAC3DC,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,SAAA;AAAA,IACA,OAAA,EAAQ,WAAA;AAAA,IACR,IAAA,EAAK,cAAA;AAAA,IACL,aAAA,EAAY,MAAA;AAAA,IAEZ,QAAA,kBAAAA,cAAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,QAAA,EAAS,SAAA;AAAA,QACT,CAAA,EAAE,qIAAA;AAAA,QACF,QAAA,EAAS;AAAA;AAAA;AACX;AACF,CAAA;AAOK,IAAM,SAAgC,CAAC;AAAA,EAC5C,KAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUS,2BAAS,KAAK,CAAA;AAChD,EAAA,MAAM,CAAC,gBAAA,EAAkB,mBAAmB,CAAA,GAAUA,2BAAS,EAAE,CAAA;AACjE,EAAA,MAAM,YAAA,GAAqBA,yBAAuB,IAAI,CAAA;AAEtD,EAAA,MAAM,YAAA,GAAqBA,8BAAY,MAAM;AAC3C,IAAA,IAAI,CAAC,QAAA,EAAU;AACb,MAAA,SAAA,CAAU,CAAC,IAAA,KAAS,CAAC,IAAI,CAAA;AACzB,MAAA,IAAI,CAAC,MAAA,EAAQ,mBAAA,CAAoB,CAAC,CAAA;AAAA,IACpC;AAAA,EACF,CAAA,EAAG,CAAC,QAAA,EAAU,MAAM,CAAC,CAAA;AAErB,EAAA,MAAM,YAAA,GAAqBA,iBAAA,CAAA,WAAA;AAAA,IACzB,CAAC,QAAA,KAAqB;AACpB,MAAA,aAAA,CAAc,QAAQ,CAAA;AACtB,MAAA,SAAA,CAAU,KAAK,CAAA;AACf,MAAA,mBAAA,CAAoB,EAAE,CAAA;AAAA,IACxB,CAAA;AAAA,IACA,CAAC,aAAa;AAAA,GAChB;AAGA,EAAMA,4BAAU,MAAM;AACpB,IAAA,MAAM,kBAAA,GAAqB,CAAC,KAAA,KAAsB;AAChD,MAAA,IACE,YAAA,CAAa,WACb,CAAC,YAAA,CAAa,QAAQ,QAAA,CAAS,KAAA,CAAM,MAAc,CAAA,EACnD;AACA,QAAA,SAAA,CAAU,KAAK,CAAA;AACf,QAAA,mBAAA,CAAoB,EAAE,CAAA;AAAA,MACxB;AAAA,IACF,CAAA;AAEA,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AACzD,MAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,WAAA,EAAa,kBAAkB,CAAA;AAAA,IAC3E;AAAA,EACF,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAMA,4BAAU,MAAM;AACpB,IAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAyB;AAC7C,MAAA,IAAI,KAAA,CAAM,GAAA,KAAQ,QAAA,IAAY,MAAA,EAAQ;AACpC,QAAA,SAAA,CAAU,KAAK,CAAA;AACf,QAAA,mBAAA,CAAoB,EAAE,CAAA;AAAA,MACxB;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,YAAY,CAAA;AACjD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,YAAY,CAAA;AAAA,EACnE,CAAA,EAAG,CAAC,MAAM,CAAC,CAAA;AAGX,EAAA,MAAM,gBAAA,GAAyBA,iBAAA,CAAA,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAC,KAAA,KAAU;AAC/D,IAAA,IAAI,CAAOA,iBAAA,CAAA,cAAA,CAAe,KAAK,CAAA,EAAG,OAAO,KAAA;AAEzC,IAAA,IAAI,KAAA,CAAM,SAAS,aAAA,EAAe;AAChC,MAAA,OAAaA,+BAAa,KAAA,EAAiD;AAAA,QACzE,OAAA,EAAS,MAAA;AAAA,QACT,SAAA,EAAW,QAAA;AAAA,QACX,SAAA,EAAW;AAAA,OACZ,CAAA;AAAA,IACH;AAEA,IAAA,IAAI,KAAA,CAAM,SAAS,aAAA,EAAe;AAChC,MAAA,OAAaA,+BAAa,KAAA,EAAiD;AAAA,QACzE,OAAA,EAAS,MAAA;AAAA,QACT,MAAA,EAAQ,KAAA;AAAA,QACR,SAAA,EAAW,YAAA;AAAA,QACX,iBAAA,EAAmB,gBAAA;AAAA,QACnB,oBAAA,EAAsB;AAAA,OACvB,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,KAAA;AAAA,EACT,CAAC,CAAA;AAED,EAAA,uBACET,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAA,EAAc,WAAWD,qBAAAA,CAAQ,UAAA,EAAY,SAAS,CAAA,EAC7D,QAAA,EAAA,gBAAA,EACH,CAAA;AAEJ;AAEA,MAAA,CAAO,WAAA,GAAc,QAAA;AAMd,IAAM,aAAA,GAAsBU,iBAAA,CAAA,UAAA;AAAA,EACjC,CACE;AAAA,IACE,WAAA,GAAc,WAAA;AAAA,IACd,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,WAAA,GAAoBA,iBAAA,CAAA,QAAA,CAAS,KAAA,CAAM,QAAQ,CAAA,GAAI,CAAA;AAErD,IAAA,uBACEP,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,SAAA;AAAA,QACT,QAAA,EAAU,SAAA;AAAA,QACV,eAAA,EAAc,SAAA;AAAA,QACd,eAAA,EAAe,OAAA;AAAA,QACf,SAAA,EAAWH,qBAAAA;AAAA,UACT,kFAAA;AAAA,UACA,6PAAA;AAAA,UACA,oKAAA;AAAA,UACA,kCAAA;AAAA,UACA,iEAAA;AAAA,UACA,6JAAA;AAAA,UACA,SAAA,IAAa,+BAAA;AAAA,UACb;AAAA,SACF;AAAA,QAEA,QAAA,EAAA;AAAA,0BAAAC,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,SAAA,EACE,CAAC,WAAA,GACG,wDAAA,GACA,MAAA;AAAA,cAGL,wBAAc,QAAA,GAAW;AAAA;AAAA,WAC5B;AAAA,0BACAA,cAAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAWD,qBAAAA;AAAA,gBACT,sFAAA;AAAA,gBACA,OAAA,IAAW;AAAA;AACb;AAAA;AACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AAMrB,IAAM,aAAA,GAAsBU,iBAAA,CAAA,UAAA;AAAA,EACjC,CACE;AAAA,IACE,SAAA;AAAA,IACA,QAAA;AAAA,IACA,OAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,OAAA,GAAgBA,yBAAyB,IAAI,CAAA;AAGnD,IAAA,MAAM,SAAA,GAAkBA,iBAAA,CAAA,WAAA;AAAA,MACtB,CAAC,IAAA,KAAkC;AACjC,QAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,UAAA,GAAA,CAAI,IAAI,CAAA;AAAA,QACV,WAAW,GAAA,EAAK;AACd,UAAA,GAAA,CAAI,OAAA,GAAU,IAAA;AAAA,QAChB;AACC,QAAC,QAA4D,OAAA,GAAU,IAAA;AAAA,MAC1E,CAAA;AAAA,MACA,CAAC,GAAG;AAAA,KACN;AAGA,IAAMA,4BAAU,MAAM;AACpB,MAAA,IAAI,WAAW,iBAAA,KAAsB,MAAA,IAAa,iBAAA,IAAqB,CAAA,IAAK,QAAQ,OAAA,EAAS;AAC3F,QAAA,MAAM,kBAAA,GAAqB,OAAA,CAAQ,OAAA,CAAQ,QAAA,CAAS,iBAAiB,CAAA;AACrE,QAAA,IAAI,kBAAA,EAAoB;AACtB,UAAA,kBAAA,CAAmB,cAAA,CAAe,EAAE,KAAA,EAAO,SAAA,EAAW,CAAA;AAAA,QACxD;AAAA,MACF;AAAA,IACF,CAAA,EAAG,CAAC,OAAA,EAAS,iBAAiB,CAAC,CAAA;AAG/B,IAAA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAA,MAAM,gBAAA,GAAyBA,iBAAA,CAAA,QAAA,CAAS,GAAA,CAAI,QAAA,EAAU,CAAC,KAAA,KAAU;AAC/D,MAAA,IAAI,CAAOA,iBAAA,CAAA,cAAA,CAAe,KAAK,CAAA,EAAG,OAAO,KAAA;AAEzC,MAAA,IAAI,KAAA,CAAM,SAAS,UAAA,EAAY;AAC7B,QAAA,MAAM,YAAA,GAAe,SAAA,EAAA;AACrB,QAAA,MAAM,YAAY,KAAA,CAAM,KAAA;AACxB,QAAA,OAAaA,+BAAa,KAAA,EAA8C;AAAA,UACtE,MAAA,EAAQ,YAAA;AAAA,UACR,WAAA,EAAa,WAAW,SAAA,CAAU,KAAA;AAAA,UAClC,gBAAgB,iBAAA,KAAsB,YAAA;AAAA,UACtC,SAAA;AAAA,UACA,YAAA,EAAc;AAAA,SACf,CAAA;AAAA,MACH;AAEA,MAAA,OAAO,KAAA;AAAA,IACT,CAAC,CAAA;AAED,IAAA,MAAM,eAAA,GAAkB;AAAA,MACtB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,MAC5B,OAAA,EAAS;AAAA,QACP,OAAA,EAAS,CAAA;AAAA,QACT,CAAA,EAAG,CAAA;AAAA,QACH,YAAY,EAAE,IAAA,EAAM,UAAmB,OAAA,EAAS,EAAA,EAAI,WAAW,GAAA;AAAI,OACrE;AAAA,MACA,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,CAAA,EAAG,IAAI,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAE,KAC3D;AAEA,IAAA,uBACET,cAAAA,CAACU,4BAAA,EAAA,EAAgB,IAAA,EAAK,MAAA,EACnB,qCACCV,cAAAA;AAAA,MAACQ,mBAAAA,CAAO,EAAA;AAAA,MAAP;AAAA,QACC,GAAA,EAAK,SAAA;AAAA,QACL,IAAA,EAAK,SAAA;AAAA,QACL,QAAA,EAAU,eAAA;AAAA,QACV,OAAA,EAAQ,QAAA;AAAA,QACR,OAAA,EAAQ,SAAA;AAAA,QACR,IAAA,EAAK,MAAA;AAAA,QACL,SAAA,EAAWT,qBAAAA;AAAA,UACT,6DAAA;AAAA,UACA,kQAAA;AAAA,UACA,wBAAA;AAAA,UACA,8CAAA;AAAA,UACA;AAAA,SACF;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH,EAEJ,CAAA;AAAA,EAEJ;AACF;AAEA,aAAA,CAAc,WAAA,GAAc,eAAA;AAMrB,IAAM,UAAA,GAAmBU,iBAAA,CAAA,UAAA;AAAA,EAC9B,CACE;AAAA,IACE,KAAA;AAAA,IACA,QAAA,GAAW,KAAA;AAAA,IACX,SAAA;AAAA,IACA,QAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA;AAAA,IACA,cAAA;AAAA,IACA,SAAA;AAAA,IACA;AAAA,KAEF,GAAA,KACG;AACH,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,CAAC,YAAY,SAAA,EAAW;AAC1B,QAAA,SAAA,CAAU,KAAK,CAAA;AAAA,MACjB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,mBAAmB,MAAM;AAC7B,MAAA,IAAI,CAAC,QAAA,IAAY,YAAA,IAAgB,MAAA,KAAW,MAAA,EAAW;AACrD,QAAA,YAAA,CAAa,MAAM,CAAA;AAAA,MACrB;AAAA,IACF,CAAA;AAEA,IAAA,uBACET,cAAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACC,GAAA;AAAA,QACA,IAAA,EAAK,QAAA;AAAA,QACL,eAAA,EAAe,WAAA;AAAA,QACf,eAAA,EAAe,QAAA;AAAA,QACf,OAAA,EAAS,WAAA;AAAA,QACT,YAAA,EAAc,gBAAA;AAAA,QACd,SAAA,EAAWD,qBAAAA;AAAA,UACT,+NAAA;AAAA,UACA,uDAAA;AAAA,UACA,WAAA,IAAe,wDAAA;AAAA,UACf,cAAA,IAAkB,8CAAA;AAAA,UAClB,QAAA,IAAY,+BAAA;AAAA,UACZ;AAAA,SACF;AAAA,QAEC;AAAA;AAAA,KACH;AAAA,EAEJ;AACF;AAEA,UAAA,CAAW,WAAA,GAAc,YAAA;AC1WlB,IAAM,QAAA,GAAoC,CAAC,EAAA,KAQ5C;AAR4C,EAAA,IAAA,EAAA,GAAA,EAAA,EAChD;AAAA,IAAA,KAAA,GAAQ,MAAA;AAAA,IACR,MAAA,GAAS,MAAA;AAAA,IACT,OAAA,GAAU,MAAA;AAAA,IACV,OAAA,GAAU,IAAA;AAAA,IACV,SAAA;AAAA,IACA;AAAA,GAtBF,GAgBkD,EAAA,EAO7C,KAAA,GAAA,SAAA,CAP6C,EAAA,EAO7C;AAAA,IANH,OAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,eAAA,GACJ,gKAAA;AAEF,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,SAAA,EAAWD,qBAAAA;AAAA,QACT,0CAAA;AAAA,QACA,OAAA,KAAY,WAAW,kDAAA,GAAqD,gDAAA;AAAA,QAC5E;AAAA,OACF;AAAA,MACA,KAAA,EAAO,cAAA,CAAA;AAAA,QACL,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,CAAA,EAAG,KAAK,CAAA,EAAA,CAAA,GAAO,KAAA;AAAA,QAClD,QAAQ,OAAO,MAAA,KAAW,QAAA,GAAW,CAAA,EAAG,MAAM,CAAA,EAAA,CAAA,GAAO,MAAA;AAAA,QACrD,UAAA,EAAY;AAAA,OAAA,EACT,KAAA;AAAA,KAAA,EAED,KAAA,CAAA,EAZL;AAAA,MAcE,QAAA,EAAA,OAAA,oBACCC,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sKAAA,EAAuK;AAAA,KAAA;AAAA,GAE1L;AAEJ;AAEA,QAAA,CAAS,WAAA,GAAc,UAAA;AC9ChB,SAAS,uBAAwB,EAAA,EAAgD;AAAhD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAJ1C,GAIwC,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACxC,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,kCAAA;AAAA,IACA,eAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,0BAAA;AAAA,MACV,cAAA,EAAa,0BAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS;AAAA,KAAA,EACrC,KAAA;AAAA,GACN;AAEJ;AAEO,SAAS,0BAA2B,EAAA,EAAgD;AAAhD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EArB7C,GAqB2C,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AAC3C,EAAA,MAAM,WAAA,GAAc,0GAAA;AAEpB,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,6BAAA;AAAA,MACV,cAAA,EAAa,6BAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS;AAAA,KAAA,EACrC,KAAA;AAAA,GACN;AAEJ;AAEO,SAAS,wBAAyB,EAAA,EAA8C;AAA9C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAlC3C,GAkCyC,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACzC,EAAA,uBACEC,cAAAA;AAAA,IAAC,WAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,OAAA,EAAQ,IAAA;AAAA,MACR,EAAA,EAAG,GAAA;AAAA,MACH,WAAA,EAAU,2BAAA;AAAA,MACV,cAAA,EAAa,2BAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA,CAAQ,gEAAA,EAAkE,SAAS;AAAA,KAAA,EAC1F,KAAA;AAAA,GACN;AAEJ;AAEO,SAAS,0BAA2B,EAAA,EAA8C;AAA9C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EA/C7C,GA+C2C,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AAC3C,EAAA,uBACEC,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,OAAA,EAAQ,oGAAA;AAAA,MACR,WAAA,EAAU,6BAAA;AAAA,MACV,cAAA,EAAa,6BAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA,CAAQ,cAAA,EAAgB,SAAS;AAAA,KAAA,EACxC,KAAA;AAAA,GACN;AAEJ;AAEO,SAAS,wBAAyB,EAAA,EAAmD;AAAnD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EA3D3C,GA2DyC,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACzC,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,eAAA;AAAA,IACA,YAAA;AAAA,IACA,gDAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEC,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,2BAAA;AAAA,MACV,cAAA,EAAa,2BAAA;AAAA,MACb,YAAA,EAAW,oBAAA;AAAA,MACX,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS;AAAA,KAAA,EACrC,KAAA;AAAA,GACN;AAEJ;AC7BO,IAAM,kBAAA,GAAwD,CAAC,EAAA,KAavC;AAbuC,EAAA,IAAA,EAAA,GAAA,EAAA,EACpE;AAAA,IAAA,IAAA,GAAO,QAAA;AAAA,IACP,OAAA,GAAU,MAAA;AAAA,IACV,KAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA,GAAW,WAAA;AAAA,IACX,gBAAA,GAAmB,GAAA;AAAA,IACnB,IAAA,GAAO,IAAA;AAAA,IACP,OAAA;AAAA,IACA,QAAA,GAAW,IAAA;AAAA,IACX,IAAA;AAAA,IACA;AAAA,GA1DF,GA+CsE,EAAA,EAYjE,KAAA,GAAA,SAAA,CAZiE,EAAA,EAYjE;AAAA,IAXH,MAAA;AAAA,IACA,SAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,MAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUY,2BAAS,IAAI,CAAA;AACrD,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUA,2BAAS,KAAK,CAAA;AACtD,EAAA,MAAM,QAAA,GAAiBA,yBAA6C,IAAI,CAAA;AAExE,EAAA,MAAM,oBAAA,GAAuB;AAAA,IAC3B,IAAA,EAAM,gGAAA;AAAA,IACN,OAAA,EAAS,sGAAA;AAAA,IACT,KAAA,EAAO,kGAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,mBAAA,GAAsB;AAAA,IAC1B,IAAA,EAAM,6FAAA;AAAA,IACN,OAAA,EAAS,mGAAA;AAAA,IACT,KAAA,EAAO,+FAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,kBAAA,GAAqB;AAAA,IACzB,IAAA,EAAM,+CAAA;AAAA,IACN,OAAA,EAAS,kDAAA;AAAA,IACT,KAAA,EAAO,gDAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,IAAA,EAAMC,gBAAA;AAAA,IACN,OAAA,EAASC,iBAAA;AAAA,IACT,KAAA,EAAOC,iBAAA;AAAA,IACP,OAAA,EAASC;AAAA,GACX;AAEA,EAAA,MAAM,eAAA,GAAkB;AAAA,IACtB,WAAA,EAAa,eAAA;AAAA,IACb,UAAA,EAAY,cAAA;AAAA,IACZ,YAAA,EAAc,iCAAA;AAAA,IACd,cAAA,EAAgB,kBAAA;AAAA,IAChB,aAAA,EAAe,iBAAA;AAAA,IACf,eAAA,EAAiB;AAAA,GACnB;AAEA,EAAA,MAAM,cAAc,MAAM;AACxB,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,UAAA,CAAW,MAAM;AACf,MAAA,YAAA,CAAa,KAAK,CAAA;AAClB,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA,YAAA,CAAa,SAAS,OAAO,CAAA;AAC7B,QAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAAA,MACrB;AACA,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,EAAA;AAAA,IACF,GAAG,GAAG,CAAA;AAAA,EACR,CAAA;AAEA,EAAMJ,4BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,IAAA,EAAM;AACT,MAAA,WAAA,EAAY;AACZ,MAAA;AAAA,IACF;AACA,IAAA,YAAA,CAAa,IAAI,CAAA;AACjB,IAAA,YAAA,CAAa,KAAK,CAAA;AAAA,EACpB,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA;AAET,EAAMA,4BAAU,MAAM;AACpB,IAAA,IAAI,SAAS,OAAA,IAAW,IAAA,IAAQ,gBAAA,GAAmB,CAAA,IAAK,CAAC,SAAA,EAAW;AAClE,MAAA,QAAA,CAAS,OAAA,GAAU,UAAA,CAAW,WAAA,EAAa,gBAAgB,CAAA;AAAA,IAC7D;AACA,IAAA,OAAO,MAAM;AACX,MAAA,IAAI,SAAS,OAAA,EAAS;AACpB,QAAA,YAAA,CAAa,SAAS,OAAO,CAAA;AAC7B,QAAA,QAAA,CAAS,OAAA,GAAU,IAAA;AAAA,MACrB;AAAA,IACF,CAAA;AAAA,EACF,GAAG,CAAC,IAAA,EAAM,IAAA,EAAM,gBAAA,EAAkB,SAAS,CAAC,CAAA;AAE5C,EAAA,IAAI,CAAC,WAAW,OAAO,IAAA;AAMvB,EAAA,MAAM,CAAA,GAAI,OAAA;AACV,EAAA,MAAM,CAAA,GAAI,IAAA;AACV,EAAA,MAAM,CAAA,GAAI,QAAA;AAEV,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,mBAAA;AAAA,IACA,yCAAA;AAAA,IACA,8CAAA;AAAA,IACA,8CAAA;AAAA,IACA,gDAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,MAAA,EAAQ,qBAAqB,CAAC,CAAA;AAAA,IAC9B,KAAA,EAAO;AAAA,MACL,oBAAoB,CAAC,CAAA;AAAA,MACrB,yIAAA;AAAA,MACA,gBAAgB,CAAC;AAAA,KACnB,CAAE,KAAK,GAAG;AAAA,GACZ;AAEA,EAAA,MAAM,aAAA,GAAgBZ,qBAAAA;AAAA,IACpB,WAAA;AAAA,IACA,YAAY,CAAC,CAAA;AAAA,IACb,mBAAmB,CAAC,CAAA;AAAA,IACpB,SAAA,IAAa,0BAAA;AAAA,IACb;AAAA,GACF;AAEA,EAAA,MAAM,aAAA,GAAgB,aAAa,CAAC,CAAA;AACpC,EAAA,MAAM,YAAA,GAAe,IAAA,IAAA,IAAA,GAAA,IAAA,mBAAQC,cAAAA,CAAC,aAAA,EAAA,EAAc,CAAA;AAE5C,EAAA,uBACEE,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,cAAA,EAAa,qBAAA;AAAA,MACb,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW;AAAA,KAAA,EACP,KAAA,CAAA,EALL;AAAA,MAQG,QAAA,EAAA;AAAA,QAAA,QAAA,oBACEF,cAAAA,CAAC,sBAAA,EAAA,EAAwB,QAAA,EAAA,YAAA,EAAa,CAAA;AAAA,wBAI1CE,gBAAC,yBAAA,EAAA,EACE,QAAA,EAAA;AAAA,UAAA,KAAA,oBAASF,cAAAA,CAAC,uBAAA,EAAA,EAAyB,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BAC1CA,cAAAA,CAAC,yBAAA,EAAA,EAA2B,QAAA,EAAA,OAAA,EAAQ;AAAA,SAAA,EACtC,CAAA;AAAA,wBAEAA,eAAC,uBAAA,EAAA,EAAwB,OAAA,EAAS,aAChC,QAAA,kBAAAA,cAAAA,CAACgB,cAAQ,CAAA,EACX;AAAA;AAAA,KAAA;AAAA,GACF;AAEJ;AAEA,kBAAA,CAAmB,WAAA,GAAc,oBAAA;ACtL1B,IAAM,iBAAgD,CAAC;AAAA,EAC5D,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,aAAA,GAAgB,EAAA;AAAA,EAChB,cAAA,GAAiB;AACnB,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAUC,2BAAS,KAAK,CAAA;AAEhD,EAAA,MAAM,aAAa,YAAY;AAC7B,IAAA,IAAI;AACF,MAAA,MAAM,SAAA,CAAU,SAAA,CAAU,SAAA,CAAU,OAAO,CAAA;AAC3C,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,MAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,MAAA,CAAS,OAAA,CAAA;AAGT,MAAA,UAAA,CAAW,MAAM,SAAA,CAAU,KAAK,CAAA,EAAG,GAAI,CAAA;AAAA,IACzC,SAAS,GAAA,EAAK;AACZ,MAAA,OAAA,CAAQ,KAAA,CAAM,2BAA2B,GAAG,CAAA;AAAA,IAC9C;AAAA,EACF,CAAA;AAEA,EAAA,uBACEf,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWH,qBAAAA;AAAA,QACT,8FAAA;AAAA,QACA,2FAAA;AAAA,QACA,2EAAA;AAAA,QACA,oEAAA;AAAA,QACA;AAAA,OACF;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWD,qBAAAA;AAAA,cACT,gDAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QACC,kCACCC,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,OAAA,EAAS,UAAA;AAAA,YACT,SAAA,EAAU,mKAAA;AAAA,YACV,YAAA,EAAW,cAAA;AAAA,YAEV,mCAEGA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,gEAAA;AAAA,gBACV,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBAER,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,aAAA,EAAc,OAAA;AAAA,oBACd,cAAA,EAAe,OAAA;AAAA,oBACf,WAAA,EAAa,CAAA;AAAA,oBACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA,gCAIFA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,SAAA,EAAU,SAAA;AAAA,gBACV,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBAER,QAAA,kBAAAA,cAAAA;AAAA,kBAAC,MAAA;AAAA,kBAAA;AAAA,oBACC,aAAA,EAAc,OAAA;AAAA,oBACd,cAAA,EAAe,OAAA;AAAA,oBACf,WAAA,EAAa,CAAA;AAAA,oBACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AACF;AAAA;AAEN;AAAA;AAAA,GAEJ;AAEJ;AAEA,cAAA,CAAe,WAAA,GAAc,gBAAA;ACtEtB,IAAM,iBAAgD,CAAC;AAAA,EAC5D,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,SAAA,GAAY,EAAA;AAAA,EACZ,gBAAA,GAAmB,EAAA;AAAA,EACnB,gBAAA,GAAmB,EAAA;AAAA,EACnB,YAAA,GAAe;AACjB,CAAA,KAAM;AACJ,EAAA,uBACEE,eAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWH,qBAAAA;AAAA,QACT,8FAAA;AAAA,QACA,6CAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAM,WAAA;AAAA,MAGN,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,SAAA,EAAA,EAAQ,SAAA,EAAWD,qBAAAA,CAAQ,uBAAA,EAAyB,gBAAgB,CAAA,EACnE,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,8GAAA,EAAgH,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,0BAC1IA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,wHAAA;AAAA,cACV,IAAA,EAAK,MAAA;AAAA,cACL,MAAA,EAAO,cAAA;AAAA,cACP,OAAA,EAAQ,WAAA;AAAA,cACR,aAAA,EAAY,MAAA;AAAA,cAEZ,QAAA,kBAAAA,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,aAAA,EAAc,OAAA;AAAA,kBACd,cAAA,EAAe,OAAA;AAAA,kBACf,WAAA,EAAa,CAAA;AAAA,kBACb,CAAA,EAAE;AAAA;AAAA;AACJ;AAAA;AACF,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAGAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWD,qBAAAA;AAAA,cACT,wCAAA;AAAA,cACA,YAAA,IAAgB,qEAAA;AAAA,cAChB;AAAA,aACF;AAAA,YAEC,QAAA,EAAA,KAAA,CAAM,IAAI,CAAC,IAAA,EAAM,0BAChBG,eAAAA,CAAC,KAAA,EAAA,EAAgB,SAAA,EAAU,mEAAA,EACzB,QAAA,EAAA;AAAA,8BAAAF,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,oGAAA;AAAA,kBACR,SAAA,EAAWD,qBAAAA,CAAQ,wDAAA,EAA0D,IAAA,CAAK,cAAc,CAAA;AAAA,kBAE/F,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,eACR;AAAA,cACC,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,mBAEnBC,cAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,OAAA,EAAQ,oGAAA;AAAA,kBACR,SAAA,EAAWD,qBAAAA,CAAQ,8GAAA,EAAgH,IAAA,CAAK,cAAc,CAAA;AAAA,kBAErJ,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,eACR,mBAGAC,cAAAA,CAAC,KAAA,EAAA,EAAI,WAAW,IAAA,CAAK,cAAA,EAAiB,eAAK,KAAA,EAAM;AAAA,aAAA,EAAA,EAjB7C,KAmBV,CACD;AAAA;AAAA;AACH;AAAA;AAAA,GACF;AAEJ;ACpGO,IAAM,gCAA+D,CAAC;AAAA,EAC3E,KAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,SAAA,GAAY,EAAA;AAAA,EACZ,gBAAA,GAAmB,EAAA;AAAA,EACnB,gBAAA,GAAmB,EAAA;AAAA,EACnB,YAAA,GAAe;AACjB,CAAA,KAAM;AACJ,EAAA,uBACEE,eAAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,oBAAA;AAAA,MACb,WAAA,EAAU,oBAAA;AAAA,MACV,SAAA,EAAWH,qBAAAA;AAAA,QACT,sRAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,IAAA,EAAM,WAAA;AAAA,MAGN,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,4BAAA;AAAA,YACb,WAAA,EAAU,4BAAA;AAAA,YACV,SAAA,EAAWD,qBAAAA,CAAQ,0BAAA,EAA4B,gBAAgB,CAAA;AAAA,YAE/D,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,8BAAAF,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,0BAAA;AAAA,kBACb,WAAA,EAAU,0BAAA;AAAA,kBACV,SAAA,EAAU,4HAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,8BACAA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,4BAAA;AAAA,kBACb,WAAA,EAAU,4BAAA;AAAA,kBACV,SAAA,EAAU,uIAAA;AAAA,kBACV,OAAA,EAAQ,WAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,MAAA,EAAO,cAAA;AAAA,kBACP,aAAA,EAAY,MAAA;AAAA,kBAEZ,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EAAQ,WAAA,EAAa,CAAA,EAAG,CAAA,EAAE,cAAA,EAAe;AAAA;AAAA;AACtF,aAAA,EACF;AAAA;AAAA,SACF;AAAA,wBAGAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,gCAAA;AAAA,YACb,WAAA,EAAU,gCAAA;AAAA,YACV,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBAGAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,4BAAA;AAAA,YACb,WAAA,EAAU,4BAAA;AAAA,YACV,SAAA,EAAWD,qBAAAA,CAAQ,0CAAA,EAA4C,gBAAgB,CAAA;AAAA,YAE9E,QAAA,EAAA,KAAA,CAAM,IAAI,CAAC,IAAA,EAAM,sBAChBG,eAAAA,CAAOgB,4BAAN,EACC,QAAA,EAAA;AAAA,8BAAAhB,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,wBAAA;AAAA,kBACb,WAAA,EAAU,wBAAA;AAAA,kBACV,SAAA,EAAU,qFAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAF,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,cAAA,EAAa,8BAAA;AAAA,wBACb,WAAA,EAAU,8BAAA;AAAA,wBACV,SAAA,EAAWD,qBAAAA;AAAA,0BACT,qKAAA;AAAA,0BACA,IAAA,CAAK;AAAA,yBACP;AAAA,wBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,qBACR;AAAA,oBAEC,OAAO,IAAA,CAAK,KAAA,KAAU,QAAA,mBAEnBC,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,cAAA,EAAa,8BAAA;AAAA,wBACb,WAAA,EAAU,8BAAA;AAAA,wBACV,SAAA,EAAWD,qBAAAA;AAAA,0BACT,uIAAA;AAAA,0BACA,IAAA,CAAK;AAAA,yBACP;AAAA,wBAEC,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,wCAIRC,cAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,cAAA,EAAa,8BAAA;AAAA,wBACb,WAAA,EAAU,8BAAA;AAAA,wBACV,SAAA,EAAWD,qBAAAA,CAAQ,YAAA,EAAc,IAAA,CAAK,cAAc,CAAA;AAAA,wBAEnD,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA;AACR;AAAA;AAAA,eAEN;AAAA,cAEC,YAAA,IAAgB,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS,qBAClCC,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,gCAAA;AAAA,kBACb,WAAA,EAAU,gCAAA;AAAA,kBACV,SAAA,EAAU;AAAA;AAAA;AACZ,aAAA,EAAA,EA9CiB,CAgDrB,CACD;AAAA;AAAA;AACH;AAAA;AAAA,GACF;AAEJ;AC5CO,IAAM,cAA0C,CAAC;AAAA,EACtD,EAAA;AAAA,EACA,oBAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,gBAAA,GAAmB,EAAA;AAAA,EACnB,QAAA,GAAW,QAAA;AAAA,EACX,MAAA,GAAS,MAAA;AAAA,EACT,oBAAA,GAAuB,IAAA;AAAA,EACvB,KAAA;AAAA,EACA,WAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,KAAM;AACJ,EAAA,MAAM,iBAAA,GAAoB,UAAU,oBAAA,KAAyB,EAAA;AAE7D,EAAMmB,4BAAU,MAAM;AACpB,IAAA,IAAI,iBAAA,EAAmB;AAErB,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AAAA,IACjC,CAAA,MAAO;AACL,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AAAA,IACjC;AAEA,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAA,GAAW,EAAA;AAAA,IACjC,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,iBAAiB,CAAC,CAAA;AAGtB,EAAMA,4BAAU,MAAM;AACpB,IAAA,IAAI,CAAC,iBAAA,EAAmB;AAExB,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAqB;AACzC,MAAA,IAAI,CAAA,CAAE,QAAQ,QAAA,EAAU;AACtB,QAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,EAAA;AAAA,MACF;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,YAAY,CAAA;AACjD,IAAA,OAAO,MAAM,QAAA,CAAS,mBAAA,CAAoB,SAAA,EAAW,YAAY,CAAA;AAAA,EACnE,CAAA,EAAG,CAAC,iBAAA,EAAmB,OAAO,CAAC,CAAA;AAG/B,EAAA,MAAM,mBAAA,GAAsB,CAAC,CAAA,KAAwB;AACnD,IAAA,IAAI,oBAAA,IAAwB,CAAA,CAAE,MAAA,KAAW,CAAA,CAAE,aAAA,EAAe;AACxD,MAAA,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,EAAA;AAAA,IACF;AAAA,EACF,CAAA;AAGA,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,MAAA,EAAQ,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,IACrB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,IACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA;AAAE,GACrB;AAEA,EAAA,MAAM,aAAA,GAAgB;AAAA,IACpB,MAAA,EAAQ,QAAA,KAAa,QAAA,GAAW,EAAE,CAAA,EAAG,MAAA,EAAO,GAAI,EAAE,OAAA,EAAS,CAAA,EAAG,KAAA,EAAO,IAAA,EAAK;AAAA,IAC1E,OAAA,EACE,aAAa,QAAA,GACT;AAAA,MACE,CAAA,EAAG,IAAA;AAAA,MACH,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW;AAAA;AACb,KACF,GACA;AAAA,MACE,OAAA,EAAS,CAAA;AAAA,MACT,KAAA,EAAO,CAAA;AAAA,MACP,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW;AAAA;AACb,KACF;AAAA,IACN,IAAA,EACE,aAAa,QAAA,GACT;AAAA,MACE,CAAA,EAAG,MAAA;AAAA,MACH,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW;AAAA;AACb,KACF,GACA;AAAA,MACE,OAAA,EAAS,CAAA;AAAA,MACT,KAAA,EAAO,IAAA;AAAA,MACP,UAAA,EAAY;AAAA,QACV,IAAA,EAAM,QAAA;AAAA,QACN,OAAA,EAAS,EAAA;AAAA,QACT,SAAA,EAAW;AAAA;AACb;AACF,GACR;AAGA,EAAA,MAAM,iBAAiB,MAAM;AAC3B,IAAA,QAAQ,MAAA;AAAQ,MACd,KAAK,MAAA;AACH,QAAA,OAAO,QAAA;AAAA,MACT,KAAK,MAAA;AACH,QAAA,OAAO,UAAA;AAAA,MACT,KAAK,MAAA;AAAA,MACL;AACE,QAAA,OAAO,QAAA;AAAA;AACX,EACF,CAAA;AAEA,EAAA,uBACEnB,cAAAA,CAACU,4BAAAA,EAAA,EAAgB,IAAA,EAAK,MAAA,EACnB,+CACCR,eAAAA;AAAA,IAACM,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,SAAA,EAAWT,qBAAAA;AAAA,QACT,wCAAA;AAAA,QACA,QAAA,KAAa,WAAW,WAAA,GAAc,cAAA;AAAA,QACtC;AAAA,OACF;AAAA,MACA,IAAA,EAAK,QAAA;AAAA,MACL,YAAA,EAAW,MAAA;AAAA,MACX,OAAA,EAAS,mBAAA;AAAA,MACT,QAAA,EAAU,gBAAA;AAAA,MACV,OAAA,EAAQ,QAAA;AAAA,MACR,OAAA,EAAQ,SAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAA,MAG5B,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,kFAAA;AAAA,YACV,aAAA,EAAY;AAAA;AAAA,SACd;AAAA,wBAGAA,cAAAA;AAAA,UAACQ,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,SAAA,EAAWT,qBAAAA;AAAA,cACT,gLAAA;AAAA,cACA,QAAA,KAAa,WACT,6DAAA,GACA,gGAAA;AAAA,cACJ,cAAA,EAAe;AAAA,cACf;AAAA,aACF;AAAA,YACA,QAAA,EAAU,aAAA;AAAA,YACV,OAAA,EAAQ,QAAA;AAAA,YACR,OAAA,EAAQ,SAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YAEJ;AAAA;AAAA;AACH;AAAA;AAAA,GACF,EAEJ,CAAA;AAEJ;AChOe,SAAR,yBAAA,CAA4C;AAAA,EACjD,SAAA;AAAA,EACA;AACF,CAAA,EAAmC;AACjC,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAWD,qBAAAA,CAAQ,gBAAA,EAAkB,SAAS,CAAA;AAAA,MAE7C;AAAA;AAAA,GACH;AAEJ;AC6BO,SAAS,SAAU,EAAA,EAAwC;AAAxC,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAjD5B,GAiD0B,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AAC1B,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,yEAAA;AAAA,IACA,kHAAA;AAAA,IACA,gDAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,WAAA,GAAcA,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA;AAElD,EAAA,uBACEC,cAAAA;AAAA,IAAC,SAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,WAAA;AAAA,MACV,cAAA,EAAa,WAAA;AAAA,MACb,SAAA,EAAW;AAAA,KAAA,EACP,KAAA;AAAA,GACN;AAEJ;AAOO,SAAS,eAAgB,EAAA,EAA8C;AAA9C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EA1ElC,GA0EgC,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AAChC,EAAA,MAAM,WAAA,GAAc,2EAAA;AACpB,EAAA,MAAM,aAAA,GAAgBD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA;AAEpD,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,kBAAA;AAAA,MACV,cAAA,EAAa,kBAAA;AAAA,MACb,SAAA,EAAW;AAAA,KAAA,EACP,KAAA;AAAA,GACN;AAEJ;AAOO,SAAS,cAAe,EAAA,EAA6C;AAA7C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EA7FjC,GA6F+B,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AAC/B,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,wDAAA;AAAA,IACA,gGAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,YAAA,GAAeD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA;AAEnD,EAAA,uBACEC,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAa,iBAAA;AAAA,MACb,SAAA,EAAW;AAAA,KAAA,EACP,KAAA;AAAA,GACN;AAEJ;AAeO,SAAS,cAAe,EAAA,EAA4E;AAA5E,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,IAAA,GAAO,SAAA,EAAW,IAAA,GAAO,IAAA,EAAM,SAAA,EA7HhE,GA6H+B,EAAA,EAA+C,KAAA,GAAA,SAAA,CAA/C,EAAA,EAA+C,CAA7C,MAAA,EAAkB,MAAA,EAAa,WAAA,CAAA,CAAA;AAC9D,EAAA,MAAMoB,YAAAA,GAAuE;AAAA,IAC3E,EAAA,EAAI,aAAA;AAAA,IACJ,EAAA,EAAI,aAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAEA,EAAA,MAAM,WAAA,GAAiD;AAAA,IACrD,OAAA,EAAS,uDAAA;AAAA,IACT,QAAA,EAAU,wDAAA;AAAA,IACV,QAAA,EAAU,sDAAA;AAAA,IACV,OAAA,EAAS,wDAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,MAAM,WAAA,GAAc,yEAAA;AAEpB,EAAA,MAAM,YAAA,GAAerB,sBAAQ,WAAA,EAAaqB,YAAAA,CAAY,IAAI,CAAA,EAAG,WAAA,CAAY,IAAI,CAAA,EAAG,SAAS,CAAA;AAEzF,EAAA,uBACEpB,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAa,iBAAA;AAAA,MACb,SAAA,EAAW;AAAA,KAAA,EACP,KAAA;AAAA,GACN;AAEJ;AAOO,SAAS,oBAAqB,EAAA,EAAmD;AAAnD,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EA/JvC,GA+JqC,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACrC,EAAA,MAAM,WAAA,GAAc,wFAAA;AACpB,EAAA,MAAM,WAAA,GAAcD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA;AAElD,EAAA,uBACEC,cAAAA;AAAA,IAAC,GAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,uBAAA;AAAA,MACV,cAAA,EAAa,uBAAA;AAAA,MACb,SAAA,EAAW;AAAA,KAAA,EACP,KAAA;AAAA,GACN;AAEJ;AAYO,SAAS,cAAe,EAAA,EAA+D;AAA/D,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAAW,OAAO,SAAA,EAvLnD,GAuL+B,IAAkC,KAAA,GAAA,SAAA,CAAlC,EAAA,EAAkC,CAAhC,WAAA,EAAW,OAAA,EAAO,WAAA,CAAA,CAAA;AACjD,EAAA,MAAM,WAAA,GAAc,yHAAA;AAEpB,EAAA,MAAM,gBAAA,GAA2D;AAAA,IAC/D,EAAA,EAAI,wDAAA;AAAA,IACJ,IAAA,EAAM,sDAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,eAAeD,qBAAAA,CAAQ,WAAA,EAAa,gBAAA,CAAiB,SAAS,GAAG,SAAS,CAAA;AAEhF,EAAA,MAAM,KAAA,GAAyD;AAAA,IAC7D,EAAA,kBACEC,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,MAAK,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,aAAA,EAAY,QACtE,QAAA,kBAAAA,cAAAA,CAAC,UAAK,CAAA,EAAE,qBAAA,EAAsB,IAAA,EAAK,cAAA,EAAe,CAAA,EACpD,CAAA;AAAA,IAEF,IAAA,kBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAM,IAAA,EAAK,MAAA,EAAO,MAAK,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,aAAA,EAAY,QACtE,QAAA,kBAAAA,cAAAA,CAAC,UAAK,CAAA,EAAE,qBAAA,EAAsB,IAAA,EAAK,cAAA,EAAe,CAAA,EACpD,CAAA;AAAA,IAEF,OAAA,kBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,aAAA,EAAY,MAAA,EACtE,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,2BAAA,EAA4B,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EAC3H;AAAA,GAEJ;AAEA,EAAA,uBACEE,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAa,iBAAA;AAAA,MACb,SAAA,EAAW,YAAA;AAAA,MACX,YAAA,EAAY,CAAA,cAAA,EAAc,SAAA,KAAc,IAAA,GAAO,MAAA,GAAS,cAAc,MAAA,GAAS,OAAA,GAAU,YAAS,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,KAAA,EACvG,KAAA,CAAA,EALL;AAAA,MAOE,QAAA,EAAA;AAAA,QAAA,KAAA,CAAM,SAAS,CAAA;AAAA,QACf;AAAA;AAAA,KAAA;AAAA,GACH;AAEJ;AAeO,SAAS,cAAe,EAAA,EAA+D;AAA/D,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,IAAA,GAAO,WAAW,SAAA,EA/OnD,GA+O+B,IAAkC,KAAA,GAAA,SAAA,CAAlC,EAAA,EAAkC,CAAhC,MAAA,EAAkB,WAAA,CAAA,CAAA;AACjD,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,yCAAA;AAAA,IACA,mBAAA;AAAA,IACA,gDAAA;AAAA,IACA,kGAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,WAAA,GAAuE;AAAA,IAC3E,OAAA,EAAS,kNAAA;AAAA,IACT,QAAA,EAAU,mPAAA;AAAA,IACV,QAAA,EAAU,6OAAA;AAAA,IACV,OAAA,EAAS,mPAAA;AAAA,IACT,KAAA,EAAO;AAAA,GACT;AAEA,EAAA,MAAM,eAAeH,qBAAAA,CAAQ,WAAA,EAAa,WAAA,CAAY,IAAI,GAAG,SAAS,CAAA;AAEtE,EAAA,uBACEC,cAAAA;AAAA,IAAC,MAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAa,iBAAA;AAAA,MACb,SAAA,EAAW;AAAA,KAAA,EACP,KAAA;AAAA,GACN;AAEJ;AAOO,SAAS,gBAAiB,EAAA,EAA+C;AAA/C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAjRnC,GAiRiC,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AACjC,EAAA,MAAM,cAAA,GAAiBD,qBAAAA;AAAA,IACrB,2GAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEC,cAAAA;AAAA,IAAC,IAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAa,mBAAA;AAAA,MACb,SAAA,EAAW;AAAA,KAAA,EACP,KAAA;AAAA,GACN;AAEJ;AAeO,SAAS,YAAa,EAAA,EAA2C;AAA3C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EA9S/B,GA8S6B,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AAC7B,EAAA,MAAM,WAAA,GAAc,2EAAA;AACpB,EAAA,MAAM,UAAA,GAAaD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA;AAEjD,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,cAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAW;AAAA,KAAA,EACP,KAAA;AAAA,GACN;AAEJ;AAcO,SAAS,aAAc,EAAA,EAA4C;AAA5C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAxUhC,GAwU8B,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AAC9B,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,gDAAA;AAAA,IACA,SAAA;AAAA,IACA,gDAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,WAAA,GAAcD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA;AAElD,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,gBAAA;AAAA,MACV,cAAA,EAAa,gBAAA;AAAA,MACb,SAAA,EAAW;AAAA,KAAA,EACP,KAAA;AAAA,GACN;AAEJ;ACxUA,IAAM,WAAA,GAAc;AAAA,EAClB,EAAA,EAAI;AAAA,IACF,2CAAA;AAAA,IACA,8CAAA;AAAA,IACA,gDAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAAA,EACV,EAAA,EAAI;AAAA,IACF,2CAAA;AAAA,IACA,8CAAA;AAAA,IACA,gDAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG;AACZ,CAAA;AAEO,SAAS,gBAAA,CAA6C;AAAA,EAC3D,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA,GAAU,UAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,SAAA,GAAY;AACd,CAAA,EAA6B;AAC3B,EAAA,MAAM,gBAAA,GAAmBD,qBAAAA;AAAA,IACvB,4DAAA;AAAA,IACA,+CAAA;AAAA,IACA,oEAAA;AAAA,IACA,mBAAA;AAAA,IACA,YAAY,QAAA,GAAW;AAAA,GACzB;AAEA,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,IAAA,EAAK,SAAA;AAAA,MACL,cAAA,EAAa,mBAAA;AAAA,MACb,WAAA,EAAU,mBAAA;AAAA,MACV,SAAA,EAAW,gBAAA;AAAA,MAEV,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,KAAQ;AACpB,QAAA,MAAM,QAAA,GAAW,IAAI,KAAA,KAAU,KAAA;AAC/B,QAAA,MAAM,aAAA,GAAgBD,qBAAAA;AAAA,UACpB,yCAAA;AAAA,UACA,yCAAA;AAAA,UACA,gDAAA;AAAA,UACA,mEAAA;AAAA,UACA,wFAAA;AAAA,UACA,0CAAA;AAAA,UACA,wDAAA;AAAA,UACA,YAAY,IAAI,CAAA;AAAA,UAChB,SAAA,IAAa,QAAA;AAAA,UACb,QAAA,GACI,OAAA,KAAY,UAAA,GACV,sMAAA,GACA,0FAAA,GACF;AAAA,SACN;AAEA,QAAA,uBACEG,eAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,KAAA;AAAA,YACL,eAAA,EAAe,QAAA;AAAA,YACf,cAAA,EAAa,0BAAA;AAAA,YACb,WAAA,EAAU,0BAAA;AAAA,YACV,OAAA,EAAS,MAAM,QAAA,CAAS,GAAA,CAAI,KAAK,CAAA;AAAA,YACjC,SAAA,EAAW,aAAA;AAAA,YAEV,QAAA,EAAA;AAAA,cAAA,GAAA,CAAI,wBACHF,cAAAA,CAAC,UAAK,SAAA,EAAU,mBAAA,EAAqB,cAAI,IAAA,EAAK,CAAA;AAAA,cAE/C,GAAA,CAAI;AAAA;AAAA,WAAA;AAAA,UAXA,GAAA,CAAI;AAAA,SAYX;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ;AC/EO,SAAS,WAAY,EAAE,IAAA,EAAM,IAAA,GAAO,EAAA,EAAI,WAAU,EAAoB;AAC3E,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUqB,2BAAS,KAAK,CAAA;AAEpD,EAAA,IAAI,IAAA,CAAK,OAAA,IAAW,CAAC,QAAA,EAAU;AAC7B,IAAA,uBACErB,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,cAAA,EAAa,iBAAA;AAAA,QACb,WAAA,EAAU,aAAA;AAAA,QACV,KAAK,IAAA,CAAK,OAAA;AAAA,QACV,KAAK,IAAA,CAAK,IAAA;AAAA,QACV,KAAA,EAAO,IAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,SAAA,EAAWD,qBAAAA,CAAQ,6EAAA,EAA+E,SAAS,CAAA;AAAA,QAC3G,OAAA,EAAS,MAAM,WAAA,CAAY,IAAI;AAAA;AAAA,KACjC;AAAA,EAEJ;AAEA,EAAA,uBACEC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,sBAAA;AAAA,MACb,WAAA,EAAU,aAAA;AAAA,MACV,SAAA,EAAWD,qBAAAA,CAAQ,iNAAA,EAAmN,SAAS,CAAA;AAAA,MAC/O,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,IAAA;AAAA,QACP,MAAA,EAAQ,IAAA;AAAA,QACR,YAAY,IAAA,CAAK,KAAA;AAAA,QACjB,UAAU,IAAA,GAAO,IAAA;AAAA,QACjB,aAAA,EAAe;AAAA,OACjB;AAAA,MAEC,eAAK,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,EAAE,WAAA;AAAY;AAAA,GACrC;AAEJ;ACtCO,SAAS,YAAa,EAAA,EAA2D;AAA3D,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,OAAA,EAAS,WAAW,MAAA,EAXnD,GAW6B,IAAiC,IAAA,GAAA,SAAA,CAAjC,EAAA,EAAiC,CAA/B,SAAA,EAAS,WAAA,EAAW,QAAA,CAAA,CAAA;AACjD,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,yCAAA;AAAA,IACA,SAAA;AAAA,IACA,gDAAA;AAAA,IACA,aAAA;AAAA,IACA,gBAAA;AAAA,IACA,gBAAA;AAAA,IACA,6FAAA;AAAA,IACA,sCAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEC,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,gBAAc,MAAA,IAAA,IAAA,GAAA,MAAA,GAAU,cAAA;AAAA,MACxB,WAAA,EAAU,cAAA;AAAA,MACV,OAAA;AAAA,MACA,YAAA,EAAW,QAAA;AAAA,MACX,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS;AAAA,KAAA,EACrC,IAAA,CAAA,EANL;AAAA,MAQC,QAAA,kBAAAC,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,cAAA,EAAa,mBAAA;AAAA,UACb,WAAA,EAAU,mBAAA;AAAA,UACV,OAAA,EAAQ,WAAA;AAAA,UACR,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,IAAA,EAAK,cAAA;AAAA,UACL,aAAA,EAAY,MAAA;AAAA,UAEZ,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mNAAA,EAAoN;AAAA;AAAA;AAC9N,KAAA;AAAA,GACF;AAEJ;AC/BO,SAAS,SAAU,EAAE,KAAA,EAAO,UAAU,OAAA,EAAS,SAAA,EAAW,OAAM,EAAkB;AACvF,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,uCAAA;AAAA,IACA,iEAAA;AAAA,IACA,gDAAA;AAAA,IACA,gBAAA;AAAA,IACA,cAAA;AAAA,IACA,4CAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,QAAA,EAAU,uLAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,aAAaD,qBAAAA,CAAQ,WAAA,EAAa,aAAa,QAAA,GAAW,UAAA,GAAa,SAAS,CAAC,CAAA;AAEvF,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,oEAAA;AAAA,IACA,WAAW,uDAAA,GAA0D;AAAA,GACvE,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEG,eAAAA;AAAA,IAACM,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,cAAA,EAAa,WAAA;AAAA,MACb,WAAA,EAAU,WAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,eAAA,EAAe,QAAA;AAAA,MACf,QAAA,EAAU,CAAA;AAAA,MACV,OAAA;AAAA,MACA,SAAA;AAAA,MACA,kBAAA,EAAkB,KAAA;AAAA,MAClB,SAAA,EAAW,UAAA;AAAA,MAEV,QAAA,EAAA;AAAA,QAAA,QAAA,oBACCR,cAAAA;AAAA,UAACQ,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,cAAA,EAAa,kBAAA;AAAA,YACb,WAAA,EAAU,kBAAA;AAAA,YACV,QAAA,EAAS,cAAA;AAAA,YACT,SAAA,EAAU,sIAAA;AAAA,YACV,YAAY,EAAE,IAAA,EAAM,UAAU,SAAA,EAAW,GAAA,EAAK,SAAS,EAAA;AAAG;AAAA,SAC5D;AAAA,wBAEFR,cAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,gBAAA;AAAA,YACb,WAAA,EAAU,gBAAA;AAAA,YACV,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM;AAAA;AAAA,SACR;AAAA,wBACAE,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,mBAAA;AAAA,YACb,WAAA,EAAU,mBAAA;AAAA,YACV,SAAA,EAAU,gBAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAF,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,gBAAA;AAAA,kBACb,WAAA,EAAU,gBAAA;AAAA,kBACV,SAAA,EAAW,WAAA;AAAA,kBAEV,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,eACT;AAAA,cACC,KAAA,CAAM,8BACLA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,mBAAA;AAAA,kBACb,WAAA,EAAU,mBAAA;AAAA,kBACV,SAAA,EAAU,0EAAA;AAAA,kBAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AAAA;AAEJ;AAAA;AAAA,GACF;AAEJ;AC7EO,SAAS,SAAA,CAAW,EAAE,KAAA,EAAO,QAAA,EAAU,SAAQ,EAAmB;AACvE,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,kEAAA;AAAA,IACA,qGAAA;AAAA,IACA,kDAAA;AAAA,IACA,gBAAA;AAAA,IACA,mBAAA;AAAA,IACA,6BAAA;AAAA,IACA,eAAA;AAAA,IACA,cAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,QAAA,EAAU,qLAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,gBAAgBD,qBAAAA,CAAQ,WAAA,EAAa,aAAa,QAAA,GAAW,UAAA,GAAa,SAAS,CAAC,CAAA;AAE1F,EAAA,MAAM,gBAAA,GAAmB;AAAA,IACvB,kFAAA;AAAA,IACA,WAAW,wDAAA,GAA2D;AAAA,GACxE,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEG,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,YAAA;AAAA,MACb,WAAA,EAAU,YAAA;AAAA,MACV,OAAA;AAAA,MACA,SAAA,EAAW,aAAA;AAAA,MAEX,QAAA,EAAA;AAAA,wBAAAF,cAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,iBAAA;AAAA,YACb,WAAA,EAAU,iBAAA;AAAA,YACV,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM;AAAA;AAAA,SACR;AAAA,wBACAE,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,oBAAA;AAAA,YACb,WAAA,EAAU,oBAAA;AAAA,YACV,SAAA,EAAU,WAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAF,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,kBAAA;AAAA,kBACb,WAAA,EAAU,kBAAA;AAAA,kBACV,SAAA,EAAW,gBAAA;AAAA,kBAEV,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,eACT;AAAA,cACC,KAAA,CAAM,8BACLA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,oBAAA;AAAA,kBACb,WAAA,EAAU,oBAAA;AAAA,kBACV,SAAA,EAAU,kFAAA;AAAA,kBAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AAAA;AAEJ;AAAA;AAAA,GACF;AAEJ;ACvDO,SAAS,QAAA,CAAU,EAAE,KAAA,EAAO,KAAA,EAAO,SAAS,SAAA,EAAW,KAAA,EAAO,SAAA,EAAW,UAAA,EAAW,EAAkB;AAC3G,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,OAAA,IAAW,KAAA,CAAM,UAAA;AAE1C,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,OAAA;AAAA,IACA,oEAAA;AAAA,IACA,qBAAA;AAAA,IACA,gDAAA;AAAA,IACA,6BAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,KAAA,EAAO,yFAAA;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,aAAaD,qBAAAA,CAAQ,WAAA,EAAa,aAAa,KAAA,GAAQ,OAAA,GAAU,SAAS,CAAC,CAAA;AAEjF,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,WAAA;AAAA,MACb,WAAA,EAAU,WAAA;AAAA,MACV,IAAA,EAAK,QAAA;AAAA,MACL,eAAA,EAAe,KAAA;AAAA,MACf,QAAA,EAAU,CAAA;AAAA,MACV,OAAA;AAAA,MACA,SAAA;AAAA,MACA,kBAAA,EAAkB,KAAA;AAAA,MAClB,SAAA,EAAW,UAAA;AAAA,MAEV,QAAA,EAAA;AAAA,QAAA,KAAA,oBACCF,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,kBAAA;AAAA,YACb,WAAA,EAAU,kBAAA;AAAA,YACV,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBAEFA,cAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,gBAAA;AAAA,YACb,WAAA,EAAU,gBAAA;AAAA,YACV,IAAA,EAAM,KAAA;AAAA,YACN,IAAA,EAAM;AAAA;AAAA,SACR;AAAA,wBACAE,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,mBAAA;AAAA,YACb,WAAA,EAAU,mBAAA;AAAA,YACV,SAAA,EAAU,gBAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAF,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,kBAAA;AAAA,kBACb,WAAA,EAAU,kBAAA;AAAA,kBACV,SAAA,EAAU,4HAAA;AAAA,kBAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,eACT;AAAA,8BACAA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,gBAAA;AAAA,kBACb,WAAA,EAAU,gBAAA;AAAA,kBACV,SAAA,EAAU,2EAAA;AAAA,kBAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,eACT;AAAA,cACC,6BACCE,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,iBAAA;AAAA,kBACb,WAAA,EAAU,iBAAA;AAAA,kBACV,SAAA,EAAU,oEAAA;AAAA,kBAET,QAAA,EAAA;AAAA,oBAAA,UAAA,oBACCF,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,cAAA,EAAa,qBAAA;AAAA,wBACb,WAAA,EAAU,qBAAA;AAAA,wBACV,SAAA,EAAU,6FAAA;AAAA,wBACV,KAAA,EAAO,EAAE,UAAA,EAAY,UAAA;AAAW;AAAA,qBAClC;AAAA,oCAEFE,eAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,cAAA,EAAa,uBAAA;AAAA,wBACb,WAAA,EAAU,uBAAA;AAAA,wBACV,SAAA,EAAU,oEAAA;AAAA,wBACX,QAAA,EAAA;AAAA,0BAAA,MAAA;AAAA,0BACM;AAAA;AAAA;AAAA;AACP;AAAA;AAAA;AACF;AAAA;AAAA,SAEJ;AAAA,QACC,6BAEGA,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,mBAAA;AAAA,YACb,WAAA,EAAU,mBAAA;AAAA,YACV,SAAA,EAAU,0BAAA;AAAA,YAET,QAAA,EAAA;AAAA,cAAA,KAAA,CAAM,2BACLA,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,0BAAA;AAAA,kBACb,WAAA,EAAU,0BAAA;AAAA,kBACV,SAAA,EAAU,0HAAA;AAAA,kBAET,QAAA,EAAA;AAAA,oBAAA,KAAA,CAAM,OAAA;AAAA,oBAAS,GAAA;AAAA,oCAChBF,cAAAA;AAAA,sBAAC,MAAA;AAAA,sBAAA;AAAA,wBACC,cAAA,EAAa,0BAAA;AAAA,wBACb,WAAA,EAAU,0BAAA;AAAA,wBACV,SAAA,EAAU,4HAAA;AAAA,wBAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AAAA,eACF;AAAA,cAED,KAAA,CAAM,8BACLA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,uBAAA;AAAA,kBACb,WAAA,EAAU,uBAAA;AAAA,kBACV,SAAA,EAAU,gHAAA;AAAA,kBAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AAAA,4BAKJA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,uBAAA;AAAA,YACb,WAAA,EAAU,uBAAA;AAAA,YACV,SAAA,EAAU,iQAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,GAEN;AAEJ;ACtIO,IAAM,WAAA,GAAoBsB,iBAAA,CAAA,UAAA;AAAA,EAC/B,CAAC,EAAE,KAAA,EAAO,QAAA,EAAU,cAAc,4CAAA,EAAwC,WAAA,EAAa,SAAA,EAAU,EAAG,GAAA,KAAQ;AAC1G,IAAA,MAAM,cAAA,GAAiBvB,qBAAAA,CAAQ,UAAA,EAAY,SAAS,CAAA;AAEpD,IAAA,MAAM,YAAA,GAAe;AAAA,MACnB,wBAAA;AAAA,MACA,8CAAA;AAAA,MACA,oEAAA;AAAA,MACA,gDAAA;AAAA,MACA,uGAAA;AAAA,MACA,mEAAA;AAAA,MACA,iCAAA;AAAA,MACA,gEAAA;AAAA,MACA,gCAAA;AAAA,MACA,0CAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG,CAAA;AAEV,IAAA,uBACEG,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,cAAA,EAAa,sBAAA;AAAA,QACb,WAAA,EAAU,sBAAA;AAAA,QACV,SAAA,EAAW,cAAA;AAAA,QAEX,QAAA,EAAA;AAAA,0BAAAF,cAAAA;AAAA,YAAC,OAAA;AAAA,YAAA;AAAA,cACC,cAAA,EAAa,cAAA;AAAA,cACb,WAAA,EAAU,cAAA;AAAA,cACV,GAAA;AAAA,cACA,IAAA,EAAK,MAAA;AAAA,cACL,KAAA;AAAA,cACA,UAAU,CAAC,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,cACxC,WAAA;AAAA,cACA,YAAA,EAAW,cAAA;AAAA,cACX,SAAA,EAAW,CAAC,CAAA,KAAM;AAChB,gBAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACzB,kBAAA,CAAA,CAAE,cAAA,EAAe;AACjB,kBAAA,WAAA,IAAA,IAAA,GAAA,MAAA,GAAA,WAAA,EAAA;AAAA,gBACF;AAAA,cACF,CAAA;AAAA,cACA,SAAA,EAAW;AAAA;AAAA,WACb;AAAA,0BACAA,cAAAA;AAAA,YAAC,KAAA;AAAA,YAAA;AAAA,cACC,cAAA,EAAa,mBAAA;AAAA,cACb,WAAA,EAAU,mBAAA;AAAA,cACV,SAAA,EAAU,sHAAA;AAAA,cAEV,QAAA,kBAAAE,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,KAAA,EAAM,IAAA;AAAA,kBACN,MAAA,EAAO,IAAA;AAAA,kBACP,OAAA,EAAQ,WAAA;AAAA,kBACR,IAAA,EAAK,MAAA;AAAA,kBACL,MAAA,EAAO,cAAA;AAAA,kBACP,WAAA,EAAY,GAAA;AAAA,kBACZ,aAAA,EAAc,OAAA;AAAA,kBACd,aAAA,EAAY,MAAA;AAAA,kBAEZ,QAAA,EAAA;AAAA,oCAAAF,eAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,GAAA,EAAI,CAAA;AAAA,oCAC9BA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,EAAA,EAAG,OAAA,EAAQ,EAAA,EAAG,OAAA,EAAQ;AAAA;AAAA;AAAA;AAC9C;AAAA;AACF;AAAA;AAAA,KACF;AAAA,EAEJ;AACF,CAAA;AACA,WAAA,CAAY,WAAA,GAAc,aAAA;AC/DnB,SAAS,cAAA,CAAgB,EAAE,MAAA,EAAQ,QAAA,EAAU,UAAS,EAAwB;AACnF,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,kBAAA;AAAA,MACb,WAAA,EAAU,kBAAA;AAAA,MACV,IAAA,EAAK,SAAA;AAAA,MACL,YAAA,EAAW,gBAAA;AAAA,MACX,SAAA,EAAU,6LAAA;AAAA,MAET,QAAA,EAAA,MAAA,CAAO,GAAA,CAAI,CAAC,KAAA,qBACXA,cAAAA;AAAA,QAAC,UAAA;AAAA,QAAA;AAAA,UAEC,KAAA;AAAA,UACA,UAAA,EAAY,MAAM,EAAA,KAAO,QAAA;AAAA,UACzB;AAAA,SAAA;AAAA,QAHK,KAAA,CAAM;AAAA,OAKd;AAAA;AAAA,GACH;AAEJ;AAUA,SAAS,UAAA,CAAY,EAAE,KAAA,EAAO,UAAA,EAAY,UAAS,EAAoB;AACrE,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,0BAAA;AAAA,IACA,oBAAA;AAAA,IACA,kDAAA;AAAA,IACA,oEAAA;AAAA,IACA,gBAAA;AAAA,IACA,eAAA;AAAA,IACA,mBAAA;AAAA,IACA,cAAA;AAAA,IACA,0CAAA;AAAA,IACA,6BAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,QAAA,EAAU,4OAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,cAAcD,qBAAAA,CAAQ,WAAA,EAAa,aAAa,UAAA,GAAa,UAAA,GAAa,SAAS,CAAC,CAAA;AAE1F,EAAA,uBACEC,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,aAAA;AAAA,MACb,WAAA,EAAU,aAAA;AAAA,MACV,IAAA,EAAK,KAAA;AAAA,MACL,eAAA,EAAe,UAAA;AAAA,MACf,OAAA,EAAS,MAAM,QAAA,CAAS,KAAA,CAAM,EAAE,CAAA;AAAA,MAChC,SAAA,EAAW,WAAA;AAAA,MAEX,QAAA,kBAAAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,cAAA,EAAa,mBAAA;AAAA,UACb,WAAA,EAAU,mBAAA;AAAA,UAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA,GACF;AAEJ;ACrEA,SAAS,SAAU,CAAA,EAAoB;AACrC,EAAA,IAAI,CAAC,GAAG,OAAO,EAAA;AACf,EAAA,MAAM,IAAI,UAAA,CAAW,CAAA,CAAE,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAC,CAAA;AAC7C,EAAA,OAAO,KAAA,CAAM,CAAC,CAAA,GAAI,EAAA,GAAK,CAAA;AACzB;AAEA,SAAS,WAAA,CAAa,aAAa,GAAA,EAAK;AACtC,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAUuB,2BAAS,KAAK,CAAA;AACpD,EAAMA,4BAAU,MAAM;AACpB,IAAA,MAAM,KAAA,GAAQ,MAAM,WAAA,CAAY,MAAA,CAAO,aAAa,UAAU,CAAA;AAC9D,IAAA,KAAA,EAAM;AACN,IAAA,MAAA,CAAO,gBAAA,CAAiB,UAAU,KAAK,CAAA;AACvC,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,QAAA,EAAU,KAAK,CAAA;AAAA,EACzD,CAAA,EAAG,CAAC,UAAU,CAAC,CAAA;AACf,EAAA,OAAO,QAAA;AACT;AAEA,IAAM,qBAAA,GAA2C;AAAA,EAC/C,EAAE,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,KAAA,EAAM;AAAA,EAC1B,EAAE,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,WAAA,EAAY;AAAA,EACtC,EAAE,EAAA,EAAI,YAAA,EAAc,KAAA,EAAO,aAAA;AAC7B,CAAA;AAIA,SAAS,eAAA,CAAiB;AAAA,EACxB,KAAA;AAAA,EAAO,QAAA;AAAA,EAAU,SAAA;AAAA,EAAW,YAAA;AAAA,EAAc,QAAA;AAAA,EAC1C,QAAA;AAAA,EAAU,QAAA;AAAA,EAAU,kBAAA;AAAA,EACpB,SAAA;AAAA,EAAW,WAAA;AAAA,EAAa,aAAA;AAAA,EACxB,YAAA;AAAA,EAAc,cAAA;AAAA,EAAgB;AAChC,CAAA,EAeG;AACD,EAAA,MAAM,UAAA,GAAa,WAAW,uGAAA,GAA0G,qGAAA;AAExI,EAAA,uBACErB,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAa,mBAAA;AAAA,MACb,SAAA,EAAU,sCAAA;AAAA,MAGV,QAAA,EAAA;AAAA,wBAAAF,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,cAAA;AAAA,YACV,cAAA,EAAa,cAAA;AAAA,YACb,SAAA,EAAWD,qBAAAA,CAAQ,eAAA,EAAiB,UAAU,CAAA;AAAA,YAE9C,QAAA,kBAAAC,cAAAA;AAAA,cAAC,gBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAS;AAAA,kBACP,EAAE,KAAA,EAAO,QAAA,EAAU,KAAA,EAAO,QAAA,EAAS;AAAA,kBACnC,EAAE,KAAA,EAAO,OAAA,EAAS,KAAA,EAAO,QAAA;AAAS,iBACpC;AAAA,gBACA,KAAA,EAAO,SAAA;AAAA,gBACP,QAAA,EAAU,WAAA;AAAA,gBACV,OAAA,EAAQ,UAAA;AAAA,gBACR,SAAA,EAAS;AAAA;AAAA;AACX;AAAA,SACF;AAAA,wBAGAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,gBAAA;AAAA,YACV,cAAA,EAAa,gBAAA;AAAA,YACb,SAAA,EAAU,yGAAA;AAAA,YAEV,QAAA,kBAAAA,cAAAA;AAAA,cAAC,WAAA;AAAA,cAAA;AAAA,gBACC,GAAA,EAAK,SAAA;AAAA,gBACL,KAAA,EAAO,KAAA;AAAA,gBACP,QAAA,EAAU,QAAA;AAAA,gBACV,aAAa,MAAM;AArG7B,kBAAA,IAAA,EAAA,EAAA,EAAA;AAsGY,kBAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,YAAA,CAAa,OAAA,KAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,aAAA,CAA2B,wBAAA,CAAA,KAAjD,IAAA,GAAA,MAAA,GAAA,EAAA,CAA4E,KAAA,EAAA;AAAA,gBAC9E;AAAA;AAAA;AACF;AAAA,SACF;AAAA,wBAGAA,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,MAAA,EAAQ,YAAA;AAAA,YACR,QAAA,EAAU,cAAA;AAAA,YACV,QAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBAGAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,WAAA,EAAU,eAAA;AAAA,YACV,cAAA,EAAa,eAAA;AAAA,YACb,SAAA,EAAU,iQAAA;AAAA,YAET,QAAA,EAAA,SAAA,KAAc,UAAU,aAAA,GAAU;AAAA;AAAA,SACrC;AAAA,wBAGAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,GAAA,EAAK,YAAA;AAAA,YACL,IAAA,EAAK,SAAA;AAAA,YACL,YAAA,EAAW,uBAAA;AAAA,YACX,WAAA,EAAU,YAAA;AAAA,YACV,cAAA,EAAa,YAAA;AAAA,YACb,SAAA,EAAU,+JAAA;AAAA,YAET,QAAA,EAAA,aAAA,CAAc,MAAA,KAAW,CAAA,mBAEtBE,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,WAAA,EAAU,aAAA;AAAA,gBACV,cAAA,EAAa,aAAA;AAAA,gBACb,SAAA,EAAU,uGAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAF,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8GACZ,QAAA,EAAA,SAAA,KAAc,OAAA,GAAU,qCAA4B,4BAAA,EACvD,CAAA;AAAA,kCACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEACZ,QAAA,EAAA,SAAA,KAAc,OAAA,GACX,sDACA,mCAAA,EACN;AAAA;AAAA;AAAA,aACF,GAEA,QAAA,CAAS,MAAA,KAAW,CAAA,mBAElBA,cAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,WAAA,EAAU,YAAA;AAAA,gBACV,cAAA,EAAa,YAAA;AAAA,gBACb,SAAA,EAAU,0KAAA;AAAA,gBACX,QAAA,EAAA;AAAA;AAAA,gBAKC,QAAA,CAAS,GAAA,CAAI,CAAC,KAAA,EAAO,sBACnBA,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBAEC,KAAA;AAAA,gBACA,KAAA,EAAO,CAAA,KAAM,CAAA,IAAK,CAAC,KAAA;AAAA,gBACnB,OAAA,EAAS,MAAM,QAAA,CAAS,KAAK,CAAA;AAAA,gBAC7B,WAAW,CAAC,CAAA,KAAM,kBAAA,CAAmB,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,gBAChD,KAAA,EAAO;AAAA,eAAA;AAAA,cALF,KAAA,CAAM;AAAA,aAOd;AAAA;AAAA;AAEX;AAAA;AAAA,GACF;AAEJ;AAOe,SAAR,uBAAA,CAA0C;AAAA,EAC/C,MAAA;AAAA,EAAQ,MAAA;AAAA,EAAQ,QAAA;AAAA,EAAU,OAAA;AAAA,EAAS,YAAA;AAAA,EAAc,UAAA;AAAA,EAAY;AAC/D,CAAA,EAAiC;AAvLjC,EAAA,IAAA,EAAA;AAwLE,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAUuB,iBAAA,CAAA,QAAA,CAA6B,kCAAc,QAAQ,CAAA;AAC3F,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAUA,2BAAS,EAAE,CAAA;AAC3C,EAAA,MAAM,CAAC,cAAA,EAAgB,iBAAiB,CAAA,GAAUA,2BAAS,KAAK,CAAA;AAChE,EAAA,MAAM,SAAA,GAAkBA,yBAAyB,IAAI,CAAA;AACrD,EAAA,MAAM,YAAA,GAAqBA,yBAAuB,IAAI,CAAA;AACtD,EAAA,MAAM,YAAA,GAAqBA,yBAAuB,IAAI,CAAA;AACtD,EAAA,MAAM,WAAW,WAAA,EAAY;AAE7B,EAAA,MAAM,iBAAiB,YAAA,IAAA,IAAA,GAAA,YAAA,GAAgB,qBAAA;AAGvC,EAAA,MAAM,gBAAgB,MAAA,CAAO,MAAA;AAAA,IAC3B,CAAC,CAAA,KAAG;AApMR,MAAA,IAAAC,GAAAA;AAoMY,MAAA,OAAA,CAAA,CAAAA,GAAAA,GAAA,MAAA,CAAO,CAAA,CAAE,EAAE,MAAX,IAAA,GAAAA,GAAAA,GAAgB,EAAC,EAAG,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,SAAS,CAAA;AAAA,IAAA;AAAA,GAClE;AAEA,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAUD,2BAAgB,MAAM;AAvMxE,IAAA,IAAAC,GAAAA,EAAA,EAAA;AAwMI,IAAA,MAAM,YAAY,MAAA,CAAO,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,YAAY,CAAA;AAC1D,IAAA,IAAI,eAAcA,GAAAA,GAAA,MAAA,CAAO,SAAA,CAAU,EAAE,MAAnB,IAAA,GAAAA,GAAAA,GAAwB,EAAC,EAAG,KAAK,CAAC,CAAA,KAAM,EAAE,QAAA,MAAc,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,SAAS,CAAA,EAAG;AAClG,MAAA,OAAO,SAAA;AAAA,IACT;AACA,IAAA,OAAA,CAAO,EAAA,GAAA,aAAA,CAAc,CAAC,CAAA,KAAf,IAAA,GAAA,EAAA,GAAoB,OAAO,CAAC,CAAA;AAAA,EACrC,CAAC,CAAA;AAED,EAAA,MAAM,WAAA,GAAA,CAAA,CAAe,EAAA,GAAA,MAAA,CAAO,aAAA,CAAc,EAAE,CAAA,KAAvB,IAAA,GAAA,EAAA,GAA4B,EAAC,EAAG,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,aAAa,SAAS,CAAA;AAE3F,EAAA,MAAM,QAAA,GAAW,WAAA,CACd,MAAA,CAAO,CAAC,CAAA,KAAG;AAlNhB,IAAA,IAAAA,GAAAA,EAAA,EAAA;AAkNmB,IAAA,OAAA,cAAA,KAAmB,KAAA,KAAA,CAAU,MAAAA,GAAAA,GAAA,CAAA,CAAE,SAAF,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAQ,QAAA,CAAS,cAAA,CAAA,KAAjB,IAAA,GAAA,EAAA,GAAoC,KAAA,CAAA;AAAA,EAAA,CAAM,CAAA,CACrF,MAAA;AAAA,IAAO,CAAC,CAAA,KACP,CAAA,CAAE,OAAO,WAAA,EAAY,CAAE,SAAS,KAAA,CAAM,WAAA,EAAa,CAAA,IACnD,EAAE,IAAA,CAAK,WAAA,GAAc,QAAA,CAAS,KAAA,CAAM,aAAa;AAAA,GACnD,CACC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,QAAA,CAAS,CAAA,CAAE,UAAU,CAAA,GAAI,QAAA,CAAS,CAAA,CAAE,UAAU,CAAC,CAAA;AAEjE,EAAMD,4BAAU,MAAM;AACpB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,IAAA,IAAI,YAAA,CAAa,OAAA,EAAS,YAAA,CAAa,OAAA,CAAQ,UAAA,GAAa,CAAA;AAC5D,IAAA,MAAM,UAAA,GAAa,cAAc,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,EAAA,KAAO,cAAc,EAAE,CAAA;AACtE,IAAA,IAAI,CAAC,UAAA,IAAc,aAAA,CAAc,MAAA,GAAS,CAAA,EAAG;AAC3C,MAAA,gBAAA,CAAiB,aAAA,CAAc,CAAC,CAAC,CAAA;AAAA,IACnC;AAAA,EACF,CAAA,EAAG,CAAC,SAAS,CAAC,CAAA;AAEd,EAAA,MAAM,iBAAA,GAA0BA,iBAAA,CAAA,WAAA,CAAY,CAAC,KAAA,KAAiB;AAnOhE,IAAA,IAAAC,GAAAA;AAoOI,IAAA,gBAAA,CAAiB,KAAK,CAAA;AACtB,IAAA,QAAA,CAAS,EAAE,CAAA;AACX,IAAA,iBAAA,CAAkB,KAAK,CAAA;AACvB,IAAA,CAAAA,GAAAA,GAAA,SAAA,CAAU,OAAA,KAAV,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAmB,KAAA,EAAA;AAAA,EACrB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAwBD,iBAAA,CAAA,WAAA,CAAY,CAAC,GAAA,KAA4B;AACrE,IAAA,YAAA,CAAa,GAAG,CAAA;AAAA,EAClB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAMA,4BAAU,MAAM;AACpB,IAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAqB;AAAE,MAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,QAAA,EAAU,OAAA,EAAQ;AAAA,IAAE,CAAA;AACxE,IAAA,MAAA,CAAO,gBAAA,CAAiB,WAAW,KAAK,CAAA;AACxC,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,SAAA,EAAW,KAAK,CAAA;AAAA,EAC1D,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAMA,4BAAU,MAAM;AApPxB,IAAA,IAAAC,GAAAA;AAoP0B,IAAA,CAAAA,GAAAA,GAAA,SAAA,CAAU,OAAA,KAAV,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAmB,KAAA,EAAA;AAAA,EAAQ,CAAA,EAAG,EAAE,CAAA;AAExD,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,EAAwB,KAAA,EAAc,GAAA,KAAgB;AAtPpF,IAAA,IAAAA,GAAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAuPI,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AAAE,MAAA,CAAA,CAAE,cAAA,EAAe;AAAG,MAAA,iBAAA,CAAkB,KAAK,CAAA;AAAA,IAAE;AACvF,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACzB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,EAAA,GAAA,CAAAA,GAAAA,GAAA,YAAA,CAAa,OAAA,KAAb,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAsB,cAA2B,CAAA,mBAAA,EAAsB,GAAA,GAAM,CAAC,CAAA,EAAA,CAAA,CAAA,KAA9E,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqF,KAAA,EAAA;AAAA,IACvF;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,SAAA,EAAW;AACvB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,YAAA,CAAa,YAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,aAAA,CAA2B,sBAAsB,GAAA,GAAM,CAAC,UAA9E,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqF,KAAA,EAAA;AAAA,IACvF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,EAAwB,KAAA,EAAc,GAAA,KAAgB;AAlQpF,IAAA,IAAAA,GAAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA;AAmQI,IAAA,IAAI,CAAA,CAAE,GAAA,KAAQ,OAAA,IAAW,CAAA,CAAE,QAAQ,GAAA,EAAK;AAAE,MAAA,CAAA,CAAE,cAAA,EAAe;AAAG,MAAA,QAAA,CAAS,eAAe,KAAK,CAAA;AAAA,IAAE;AAC7F,IAAA,IAAI,CAAA,CAAE,QAAQ,WAAA,EAAa;AACzB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,CAAA,EAAA,GAAA,CAAAA,GAAAA,GAAA,YAAA,CAAa,OAAA,KAAb,IAAA,GAAA,MAAA,GAAAA,GAAAA,CAAsB,cAA2B,CAAA,mBAAA,EAAsB,GAAA,GAAM,CAAC,CAAA,EAAA,CAAA,CAAA,KAA9E,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqF,KAAA,EAAA;AAAA,IACvF;AACA,IAAA,IAAI,CAAA,CAAE,QAAQ,SAAA,EAAW;AACvB,MAAA,CAAA,CAAE,cAAA,EAAe;AACjB,MAAA,IAAI,QAAQ,CAAA,EAAG;AAAE,QAAA,CAAA,EAAA,GAAA,SAAA,CAAU,YAAV,IAAA,GAAA,MAAA,GAAA,EAAA,CAAmB,KAAA,EAAA;AAAS,QAAA;AAAA,MAAO;AACpD,MAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,YAAA,CAAa,YAAb,IAAA,GAAA,MAAA,GAAA,EAAA,CAAsB,aAAA,CAA2B,sBAAsB,GAAA,GAAM,CAAC,UAA9E,IAAA,GAAA,MAAA,GAAA,EAAA,CAAqF,KAAA,EAAA;AAAA,IACvF;AAAA,EACF,CAAA;AAEA,EAAA,MAAM,qCACJxB,cAAAA;AAAA,IAAC,eAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA;AAAA,MACA,YAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA,EAAU,CAAC,KAAA,KAAU,QAAA,CAAS,eAAe,KAAK,CAAA;AAAA,MAClD,kBAAA;AAAA,MACA,SAAA;AAAA,MACA,WAAA,EAAa,eAAA;AAAA,MACb,aAAA;AAAA,MACA,YAAA,EAAc,cAAA;AAAA,MACd,cAAA;AAAA,MACA,cAAA,EAAgB;AAAA;AAAA,GAClB;AAIF,EAAA,IAAI,QAAA,EAAU;AACZ,IAAA,uBACEA,cAAAA;AAAA,MAACQ,mBAAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,QACnB,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAA,QAC5B,OAAA,EAAS,OAAA;AAAA,QACT,WAAA,EAAU,UAAA;AAAA,QACV,cAAA,EAAa,UAAA;AAAA,QACb,SAAA,EAAU,uJAAA;AAAA,QAEV,QAAA,kBAAAN,eAAAA;AAAA,UAACM,mBAAAA,CAAO,GAAA;AAAA,UAAP;AAAA,YACC,IAAA,EAAK,QAAA;AAAA,YACL,YAAA,EAAW,MAAA;AAAA,YACX,YAAA,EAAW,iCAAA;AAAA,YACX,OAAA,EAAS,EAAE,CAAA,EAAG,MAAA,EAAO;AAAA,YACrB,OAAA,EAAS,EAAE,CAAA,EAAG,CAAA,EAAE;AAAA,YAChB,IAAA,EAAM,EAAE,CAAA,EAAG,MAAA,EAAO;AAAA,YAClB,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,IAAA,EAAM,GAAA,EAAI;AAAA,YACrE,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,YAClC,WAAA,EAAU,OAAA;AAAA,YACV,cAAA,EAAa,OAAA;AAAA,YACb,SAAA,EAAW;AAAA,cACT,6EAAA;AAAA,cACA,kDAAA;AAAA,cACA,+EAAA;AAAA,cACA,kGAAA;AAAA,cACA;AAAA,aACF,CAAE,KAAK,GAAG,CAAA;AAAA,YAGV,QAAA,EAAA;AAAA,8BAAAR,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,WAAA,EAAU,aAAA;AAAA,kBACV,cAAA,EAAa,aAAA;AAAA,kBACb,SAAA,EAAU,+HAAA;AAAA,kBAEV,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0GAAA,EAA2G;AAAA;AAAA,eAC5H;AAAA,8BAGAE,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,WAAA,EAAU,cAAA;AAAA,kBACV,cAAA,EAAa,cAAA;AAAA,kBACb,SAAA,EAAU,yOAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qKAAA,EAAsK,QAAA,EAAA,iCAAA,EAEtL,CAAA;AAAA,oCACAA,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAS,OAAA,EAAS;AAAA;AAAA;AAAA,eACjC;AAAA,8BAGAE,eAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,WAAA,EAAU,eAAA;AAAA,kBACV,cAAA,EAAa,eAAA;AAAA,kBACb,SAAA,EAAU,8DAAA;AAAA,kBAEV,QAAA,EAAA;AAAA,oCAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mPAAA,EAAoP,QAAA,EAAA,OAAA,EAEnQ,CAAA;AAAA,oCACAA,cAAAA;AAAA,sBAAC,KAAA;AAAA,sBAAA;AAAA,wBACC,GAAA,EAAK,YAAA;AAAA,wBACL,IAAA,EAAK,SAAA;AAAA,wBACL,YAAA,EAAW,OAAA;AAAA,wBACX,WAAA,EAAU,iBAAA;AAAA,wBACV,cAAA,EAAa,iBAAA;AAAA,wBACb,SAAA,EAAU,+KAAA;AAAA,wBAET,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,KAAA,qBAClBA,cAAAA;AAAA,0BAAC,SAAA;AAAA,0BAAA;AAAA,4BAEC,KAAA;AAAA,4BACA,QAAA,EAAU,aAAA,CAAc,EAAA,KAAO,KAAA,CAAM,EAAA;AAAA,4BACrC,OAAA,EAAS,MAAM,iBAAA,CAAkB,KAAK;AAAA,2BAAA;AAAA,0BAHjC,KAAA,CAAM;AAAA,yBAKd;AAAA;AAAA;AACH;AAAA;AAAA,eACF;AAAA,8BAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAA,EAAuE,CAAA;AAAA,8BAGtFA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,WAAA,EAAU,YAAA;AAAA,kBACV,cAAA,EAAa,YAAA;AAAA,kBACb,SAAA,EAAU,mFAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA;AACF;AAAA,KACF;AAAA,EAEJ;AAGA,EAAA,uBACEA,cAAAA;AAAA,IAACQ,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAA,MAC5B,OAAA,EAAS,OAAA;AAAA,MACT,WAAA,EAAU,UAAA;AAAA,MACV,cAAA,EAAa,UAAA;AAAA,MACb,SAAA,EAAU,wPAAA;AAAA,MAEV,QAAA,kBAAAN,eAAAA;AAAA,QAACM,mBAAAA,CAAO,GAAA;AAAA,QAAP;AAAA,UACC,IAAA,EAAK,QAAA;AAAA,UACL,YAAA,EAAW,MAAA;AAAA,UACX,YAAA,EAAW,iCAAA;AAAA,UACX,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,UACnC,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,CAAA,EAAE;AAAA,UAChC,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,OAAO,IAAA,EAAK;AAAA,UAChC,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,MAAM,SAAA,EAAU;AAAA,UAC7C,OAAA,EAAS,CAAC,CAAA,KAAM,CAAA,CAAE,eAAA,EAAgB;AAAA,UAClC,WAAA,EAAU,OAAA;AAAA,UACV,cAAA,EAAa,OAAA;AAAA,UACb,SAAA,EAAW;AAAA,YACT,iCAAA;AAAA,YACA,qCAAA;AAAA,YACA,+CAAA;AAAA,YACA,oEAAA;AAAA,YACA,gDAAA;AAAA,YACA,kGAAA;AAAA,YACA;AAAA,WACF,CAAE,KAAK,GAAG,CAAA;AAAA,UAGV,QAAA,EAAA;AAAA,4BAAAN,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,WAAA,EAAU,cAAA;AAAA,gBACV,cAAA,EAAa,cAAA;AAAA,gBACb,SAAA,EAAU,uQAAA;AAAA,gBAEV,QAAA,EAAA;AAAA,kCAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qKAAA,EAAsK,QAAA,EAAA,iCAAA,EAEtL,CAAA;AAAA,kCACAA,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAS,OAAA,EAAS;AAAA;AAAA;AAAA,aACjC;AAAA,4BAGAE,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,WAAA,EAAU,YAAA;AAAA,gBACV,cAAA,EAAa,YAAA;AAAA,gBACb,SAAA,EAAU,6BAAA;AAAA,gBAGV,QAAA,EAAA;AAAA,kCAAAA,eAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,WAAA,EAAU,eAAA;AAAA,sBACV,cAAA,EAAa,eAAA;AAAA,sBACb,SAAA,EAAW;AAAA,wBACT,yBAAA;AAAA,wBACA,sEAAA;AAAA,wBACA,+CAAA;AAAA,wBACA;AAAA,uBACF,CAAE,KAAK,GAAG,CAAA;AAAA,sBAEV,QAAA,EAAA;AAAA,wCAAAF,cAAAA;AAAA,0BAAC,KAAA;AAAA,0BAAA;AAAA,4BACC,WAAA,EAAU,qBAAA;AAAA,4BACV,cAAA,EAAa,qBAAA;AAAA,4BACb,SAAA,EAAU,kSAAA;AAAA,4BACX,QAAA,EAAA;AAAA;AAAA,yBAED;AAAA,wCACAA,cAAAA;AAAA,0BAAC,KAAA;AAAA,0BAAA;AAAA,4BACC,GAAA,EAAK,YAAA;AAAA,4BACL,IAAA,EAAK,SAAA;AAAA,4BACL,YAAA,EAAW,OAAA;AAAA,4BACX,WAAA,EAAU,YAAA;AAAA,4BACV,cAAA,EAAa,YAAA;AAAA,4BACb,SAAA,EAAU,+JAAA;AAAA,4BAET,QAAA,EAAA,aAAA,CAAc,GAAA,CAAI,CAAC,KAAA,EAAO,sBACzBA,cAAAA;AAAA,8BAAC,QAAA;AAAA,8BAAA;AAAA,gCAEC,KAAA;AAAA,gCACA,QAAA,EAAU,aAAA,CAAc,EAAA,KAAO,KAAA,CAAM,EAAA;AAAA,gCACrC,OAAA,EAAS,MAAM,iBAAA,CAAkB,KAAK,CAAA;AAAA,gCACtC,WAAW,CAAC,CAAA,KAAM,kBAAA,CAAmB,CAAA,EAAG,OAAO,CAAC,CAAA;AAAA,gCAChD,KAAA,EAAO;AAAA,+BAAA;AAAA,8BALF,KAAA,CAAM;AAAA,6BAOd;AAAA;AAAA;AACH;AAAA;AAAA,mBACF;AAAA,kCAGAA,cAAAA;AAAA,oBAAC,KAAA;AAAA,oBAAA;AAAA,sBACC,WAAA,EAAU,aAAA;AAAA,sBACV,cAAA,EAAa,aAAA;AAAA,sBACb,SAAA,EAAU,sCAAA;AAAA,sBAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA;AACF;AAAA;AAAA;AACF;AAAA,GACF;AAEJ;AChaO,SAAS,UAAW,EAAA,EAAyC;AAAzC,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAzE7B,GAyE2B,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AAC3B,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,YAAA;AAAA,MACV,cAAA,EAAa,YAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA;AAAA,QACT,iCAAA;AAAA,QACA,kHAAA;AAAA,QACA,gDAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA;AAAA,GACN;AAEJ;AAOO,SAAS,gBAAiB,EAAA,EAAiE;AAAjE,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,MAAA,EAAQ,UAAU,SAAA,EA/FrD,GA+FiC,IAAkC,KAAA,GAAA,SAAA,CAAlC,EAAA,EAAkC,CAAhC,QAAA,EAAQ,UAAA,EAAU,WAAA,CAAA,CAAA;AACnD,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAa,mBAAA;AAAA,MACb,SAAA,EAAWH,qBAAAA,CAAQ,0KAAA,EAA4K,SAAS;AAAA,KAAA,EACpM,KAAA,CAAA,EAJL;AAAA,MAMC,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,mLAAA,EACX,QAAA,EACH,CAAA;AAAA,QACC,UAAU,IAAA,oBACTA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAA2E,QAAA,EAAA,MAAA,EAAO;AAAA;AAAA,KAAA;AAAA,GAErG;AAEJ;AASO,SAAS,gBAAiB,EAAE,OAAA,EAAS,QAAA,EAAU,QAAA,EAAU,WAAU,EAAyB;AACjG,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAa,mBAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA;AAAA,QACT,qJAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA,OACF;AAAA,MACA,KAAA,EAAO,EAAE,cAAA,EAAgB,MAAA,EAAO;AAAA,MAE/B,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,MAAA,KAAW;AACvB,QAAA,MAAM,UAAA,GAAa,OAAO,EAAA,KAAO,QAAA;AACjC,QAAA,uBACEC,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,IAAA,EAAK,QAAA;AAAA,YACL,WAAA,EAAU,wBAAA;AAAA,YACV,cAAA,EAAa,wBAAA;AAAA,YACb,OAAA,EAAS,MAAM,QAAA,CAAS,MAAA,CAAO,EAAE,CAAA;AAAA,YACjC,SAAA,EAAWD,qBAAAA;AAAA,cACT,gFAAA;AAAA,cACA,yDAAA;AAAA,cACA,kFAAA;AAAA,cACA,0CAAA;AAAA,cACA,gDAAA;AAAA,cACA,0CAAA;AAAA,cACA,aACI,4OAAA,GACA;AAAA,aACN;AAAA,YAEC,QAAA,EAAA,MAAA,CAAO;AAAA,WAAA;AAAA,UAjBH,MAAA,CAAO;AAAA,SAkBd;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ;AAQO,SAAS,iBAAkB,EAAA,EAIR;AAJQ,EAAA,IAAA,EAAA,GAAA,EAAA,EAChC;AAAA,IAAA,MAAA,GAAS,CAAC,OAAA,EAAS,cAAA,EAAa,OAAO,CAAA;AAAA,IACvC;AAAA,GAzKF,GAuKkC,EAAA,EAG7B,KAAA,GAAA,SAAA,CAH6B,EAAA,EAG7B;AAAA,IAFH,QAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,cAAA,EAAa,oBAAA;AAAA,MACb,SAAA,EAAWH,qBAAAA;AAAA,QACT,0EAAA;AAAA,QACA,2FAAA;AAAA,QACA,sEAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA,CAAA,EATL;AAAA,MAWC,QAAA,EAAA;AAAA,wBAAAC,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qKAAA,EACb,QAAA,EAAA,MAAA,CAAO,CAAC,CAAA,EACX,CAAA;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,iLAAA,EACb,QAAA,EAAA,MAAA,CAAO,CAAC,CAAA,EACX,CAAA;AAAA,wBACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAU,gLAAA,EACb,QAAA,EAAA,MAAA,CAAO,CAAC,CAAA,EACX;AAAA;AAAA,KAAA;AAAA,GACF;AAEJ;AAaO,SAAS,gBAAiB,EAAA,EAAiE;AAAjE,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAAW,OAAO,SAAA,EAhNrD,GAgNiC,IAAkC,KAAA,GAAA,SAAA,CAAlC,EAAA,EAAkC,CAAhC,WAAA,EAAW,OAAA,EAAO,WAAA,CAAA,CAAA;AACnD,EAAA,MAAM,gBAAA,GAAwD;AAAA,IAC5D,EAAA,EAAI,4OAAA;AAAA,IACJ,IAAA,EAAM,sOAAA;AAAA,IACN,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,MAAM,UAAA,GAA2D;AAAA,IAC/D,EAAA,kBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAM,GAAA,EAAI,MAAA,EAAO,KAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,aAAA,EAAY,QACpE,QAAA,kBAAAA,cAAAA,CAAC,UAAK,CAAA,EAAE,qBAAA,EAAsB,IAAA,EAAK,cAAA,EAAe,CAAA,EACpD,CAAA;AAAA,IAEF,IAAA,kBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,OAAM,GAAA,EAAI,MAAA,EAAO,KAAI,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,aAAA,EAAY,QACpE,QAAA,kBAAAA,cAAAA,CAAC,UAAK,CAAA,EAAE,qBAAA,EAAsB,IAAA,EAAK,cAAA,EAAe,CAAA,EACpD,CAAA;AAAA,IAEF,OAAA,kBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,KAAI,MAAA,EAAO,GAAA,EAAI,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,eAAY,MAAA,EACpE,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,SAAA,EAAU,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,CAAA,EAClF;AAAA,GAEJ;AAEA,EAAA,uBACEE,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,mBAAA;AAAA,MACV,cAAA,EAAa,mBAAA;AAAA,MACb,SAAA,EAAWH,qBAAAA;AAAA,QACT,oCAAA;AAAA,QACA,mBAAA;AAAA,QACA,yDAAA;AAAA,QACA,kFAAA;AAAA,QACA,0CAAA;AAAA,QACA,mBAAA;AAAA,QACA,iBAAiB,SAAS,CAAA;AAAA,QAC1B;AAAA;AACF,KAAA,EACI,KAAA,CAAA,EAbL;AAAA,MAeE,QAAA,EAAA;AAAA,QAAA,UAAA,CAAW,SAAS,CAAA;AAAA,QACpB;AAAA;AAAA,KAAA;AAAA,GACH;AAEJ;AASO,SAAS,cAAe,EAAA,EAUR;AAVQ,EAAA,IAAA,EAAA,GAAA,EAAA,EAC7B;AAAA,IAAA,KAAA;AAAA,IACA,IAAA;AAAA,IACA,MAAA;AAAA,IACA,cAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GA9QF,GAsQ+B,EAAA,EAS1B,KAAA,GAAA,SAAA,CAT0B,EAAA,EAS1B;AAAA,IARH,OAAA;AAAA,IACA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,iBAAA;AAAA,MACV,cAAA,EAAa,iBAAA;AAAA,MACb,SAAA,EAAWH,qBAAAA;AAAA,QACT,uFAAA;AAAA,QACA,wDAAA;AAAA,QACA,sEAAA;AAAA,QACA,gCAAA;AAAA,QACA,8FAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA,CAAA,EAXL;AAAA,MAcC,QAAA,EAAA;AAAA,wBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAM,KAAA,EAAO,MAAM,EAAA,EAAI,CAAA;AAAA,0BACnCE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4LAAA,EACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,4BACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qFACb,QAAA,EAAA,MAAA,EACH;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qBAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAW,cAAA,EAAgB,KAAA,EAAO,UAAA,EAAY,CAAA,EACjE,CAAA;AAAA,wBAGAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oCAAA,EACb,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,mLAAA,EACb,QAAA,EAAA,UAAA,EACH,CAAA;AAAA,0BACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qFACb,QAAA,EAAA,OAAA,EACH;AAAA,SAAA,EACF;AAAA;AAAA,KAAA;AAAA,GACF;AAEJ;AC/QA,IAAM,UAAA,GAAkH;AAAA,EACtH,GAAA,EAAK;AAAA,IACH,KAAA,EAAO,OAAA;AAAA,IACP,YAAA,EAAc,qLAAA;AAAA,IACd,QAAA,EAAU,gDAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,MAAA,EAAQ;AAAA,IACN,KAAA,EAAO,UAAA;AAAA,IACP,YAAA,EAAc,qLAAA;AAAA,IACd,QAAA,EAAU,gDAAA;AAAA,IACV,UAAA,EAAY;AAAA,GACd;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,MAAA;AAAA,IACP,YAAA,EAAc,iLAAA;AAAA,IACd,QAAA,EAAU,8CAAA;AAAA,IACV,UAAA,EAAY;AAAA;AAEhB,CAAA;AAwBO,SAAS,aAAc,EAAA,EAA4C;AAA5C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,SAAA,EAxFhC,GAwF8B,EAAA,EAAgB,KAAA,GAAA,SAAA,CAAhB,IAAgB,CAAd,WAAA,CAAA,CAAA;AAC9B,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,eAAA;AAAA,MACV,cAAA,EAAa,eAAA;AAAA,MACb,SAAA,EAAWD,qBAAAA,CAAQ,yEAAA,EAA2E,SAAS;AAAA,KAAA,EACnG,KAAA;AAAA,GACN;AAEJ;AAOO,SAAS,mBAAoB,EAAA,EAMR;AANQ,EAAA,IAAA,EAAA,GAAA,EAAA,EAClC;AAAA,IAAA,MAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA;AAAA,IACA;AAAA,GA5GF,GAwGoC,EAAA,EAK/B,KAAA,GAAA,SAAA,CAL+B,EAAA,EAK/B;AAAA,IAJH,QAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,sBAAA;AAAA,MACV,cAAA,EAAa,sBAAA;AAAA,MACb,SAAA,EAAWH,qBAAAA,CAAQ,8DAAA,EAAgE,SAAS;AAAA,KAAA,EACxF,KAAA,CAAA,EAJL;AAAA,MAMC,QAAA,EAAA;AAAA,wBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EACZ,QAAA,EAAA;AAAA,UAAA,MAAA,IAAU,wBACTF,cAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,MAAA;AAAA,cACT,YAAA,EAAW,QAAA;AAAA,cACX,SAAA,EAAWD,qBAAAA;AAAA,gBACT,kCAAA;AAAA,gBACA,SAAA;AAAA,gBACA,gDAAA;AAAA,gBACA,oEAAA;AAAA,gBACA,yDAAA;AAAA,gBACA,0JAAA;AAAA,gBACA,6BAAA;AAAA,gBACA;AAAA,eACF;AAAA,cAEA,QAAA,kBAAAC,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,aAAA,EAAY,MAAA,EACtE,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,iBAAA,EAAkB,MAAA,EAAO,cAAA,EAAe,WAAA,EAAY,KAAA,EAAM,aAAA,EAAc,OAAA,EAAQ,cAAA,EAAe,OAAA,EAAQ,CAAA,EACjH;AAAA;AAAA,WACF;AAAA,0BAEFA,cAAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,qLACX,QAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,QACC,YAAY,IAAA,oBACXA,eAAC,GAAA,EAAA,EAAE,SAAA,EAAU,8HACV,QAAA,EAAA,QAAA,EACH;AAAA;AAAA,KAAA;AAAA,GAEJ;AAEJ;AAaO,SAAS,kBAAmB,EAAA,EAA8D;AAA9D,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,IAAA,EAAM,OAAO,SAAA,EApKlD,GAoKmC,IAA6B,KAAA,GAAA,SAAA,CAA7B,EAAA,EAA6B,CAA3B,MAAA,EAAM,OAAA,EAAO,WAAA,CAAA,CAAA;AAChD,EAAA,MAAM,MAAA,GAAS,WAAW,IAAI,CAAA;AAC9B,EAAA,MAAM,YAAA,GAAe,wBAAS,MAAA,CAAO,KAAA;AAErC,EAAA,uBACEE,eAAAA;AAAA,IAAC,MAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,qBAAA;AAAA,MACV,cAAA,EAAa,qBAAA;AAAA,MACb,SAAA,EAAWH,qBAAAA;AAAA,QACT,oCAAA;AAAA,QACA,6BAAA;AAAA,QACA,yDAAA;AAAA,QACA,MAAA,CAAO,YAAA;AAAA,QACP;AAAA;AACF,KAAA,EACI,KAAA,CAAA,EAVL;AAAA,MAYC,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWD,qBAAAA,CAAQ,6FAAA,EAA+F,MAAA,CAAO,QAAQ;AAAA;AAAA,SACnI;AAAA,wBACAC,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAWD,qBAAAA;AAAA,cACT,6GAAA;AAAA,cACA,MAAA,CAAO;AAAA,aACT;AAAA,YAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,KAAA;AAAA,GACF;AAEJ;AAQO,SAAS,iBAAkB,EAAA,EAWR;AAXQ,EAAA,IAAA,EAAA,GAAA,EAAA,EAChC;AAAA,IAAA,QAAA;AAAA,IACA,IAAA;AAAA,IACA,OAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,UAAA;AAAA,IACA,OAAA;AAAA,IACA,SAAA,GAAY,IAAA;AAAA,IACZ;AAAA,GAnNF,GA0MkC,EAAA,EAU7B,KAAA,GAAA,SAAA,CAV6B,EAAA,EAU7B;AAAA,IATH,UAAA;AAAA,IACA,MAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA,GAAA,CAAA;AAGA,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,WAAA,EAAU,oBAAA;AAAA,MACV,cAAA,EAAa,oBAAA;AAAA,MACb,SAAA,EAAWH,qBAAAA;AAAA,QACT,wJAAA;AAAA,QACA,kHAAA;AAAA,QACA,gDAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,KAAA,CAAA,EATL;AAAA,MAYC,QAAA,EAAA;AAAA,wBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kEAAA,EACb,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,UAAA,EAAA,EAAW,IAAA,EAAM,QAAA,EAAU,MAAM,EAAA,EAAI,CAAA;AAAA,0BACtCE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4LAAA,EACb,QAAA,EAAA,IAAA,EACH,CAAA;AAAA,YACC,WAAW,IAAA,oBACVA,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qFACb,QAAA,EAAA,OAAA,EACH;AAAA,WAAA,EAEJ,CAAA;AAAA,UACC,IAAA,IAAQ,IAAA,oBAAQA,cAAAA,CAAC,qBAAkB,IAAA,EAAY;AAAA,SAAA,EAClD,CAAA;AAAA,wBAGAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uJAAA,EAAwJ,QAAA,EAAA,YAAA,EAExK,CAAA;AAAA,0BACAA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,kLACb,QAAA,EAAA,UAAA,EACH;AAAA,SAAA,EACF,CAAA;AAAA,wBAGAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kEAAA,EACb,QAAA,EAAA;AAAA,0BAAAF,cAAAA;AAAA,YAAC,aAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,wBAAA;AAAA,cACV,OAAA,EAAS,UAAA;AAAA,cACV,QAAA,EAAA;AAAA;AAAA,WAED;AAAA,UACC,6BACCA,cAAAA;AAAA,YAAC,eAAA;AAAA,YAAA;AAAA,cACC,SAAA,EAAU,wBAAA;AAAA,cACV,OAAA,EAAS,OAAA;AAAA,cACV,QAAA,EAAA;AAAA;AAAA;AAED,SAAA,EAEJ;AAAA;AAAA,KAAA;AAAA,GACF;AAEJ;AC7PO,SAAS,SAAA,CAAW,EAAE,KAAA,EAAO,IAAA,GAAO,IAAI,KAAA,EAAO,SAAA,GAAY,EAAA,EAAI,SAAA,EAAU,EAAmB;AACjG,EAAA,uBACEE,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,YAAA;AAAA,MACb,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAWH,qBAAAA,CAAQ,wBAAA,EAA0B,SAAS,CAAA;AAAA,MACtD,KAAA,EAAO,EAAE,KAAA,EAAO,IAAA,EAAM,QAAQ,IAAA,EAAK;AAAA,MAEnC,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAAC,UAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,mBAAA;AAAA,YACb,WAAA,EAAU,mBAAA;AAAA,YACV,IAAA,EAAM,KAAA;AAAA,YACN;AAAA;AAAA,SACF;AAAA,QACC,yBACCA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,kBAAA;AAAA,YACb,WAAA,EAAU,kBAAA;AAAA,YACV,SAAA,EAAU,8IAAA;AAAA,YAEV,QAAA,kBAAAA,cAAAA;AAAA,cAAC,UAAA;AAAA,cAAA;AAAA,gBACC,cAAA,EAAa,yBAAA;AAAA,gBACb,WAAA,EAAU,yBAAA;AAAA,gBACV,IAAA,EAAM,KAAA;AAAA,gBACN,IAAA,EAAM;AAAA;AAAA;AACR;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;AC7BO,SAAS,eAAA,CAAiB;AAAA,EAC/B,OAAA,GAAU,CAAC,EAAA,EAAI,EAAA,EAAI,IAAI,GAAG,CAAA;AAAA,EAC1B,QAAA,GAAW,SAAA;AAAA,EACX,QAAA,GAAW,IAAA;AAAA,EACX;AACF,CAAA,EAAyB;AACvB,EAAA,uBACEA,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,kBAAA;AAAA,MACb,WAAA,EAAU,kBAAA;AAAA,MACV,SAAA,EAAU,6BAAA;AAAA,MAET,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,GAAA,EAAK,CAAA,KAAM;AACvB,QAAA,MAAM,MAAA,GAAS,CAAA,KAAM,OAAA,CAAQ,MAAA,GAAS,CAAA;AACtC,QAAA,MAAM,WAAW,GAAA,KAAQ,QAAA;AACzB,QAAA,MAAM,KAAA,GAAQ,MAAA,GAAS,QAAA,GAAW,CAAA,EAAG,GAAG,CAAA,CAAA,CAAA;AAExC,QAAA,uBACEA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YAEC,KAAA;AAAA,YACA,MAAA,EAAQ,QAAA;AAAA,YACR,OAAA,EAAS,MAAM,QAAA,CAAS,GAAG;AAAA,WAAA;AAAA,UAHtB;AAAA,SAIP;AAAA,MAEJ,CAAC;AAAA;AAAA,GACH;AAEJ;AAUA,SAAS,QAAA,CAAU,EAAE,KAAA,EAAO,MAAA,EAAQ,SAAQ,EAAkB;AAC5D,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,yCAAA;AAAA,IACA,oBAAA;AAAA,IACA,kDAAA;AAAA,IACA,gBAAA;AAAA,IACA,aAAA;AAAA,IACA,6BAAA;AAAA,IACA,cAAA;AAAA,IACA,0CAAA;AAAA,IACA,mBAAA;AAAA,IACA;AAAA,GACF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,MAAA,EAAQ;AAAA,MACN,6FAAA;AAAA,MACA,yFAAA;AAAA,MACA,wDAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG,CAAA;AAAA,IACV,OAAA,EAAS;AAAA,MACP,6DAAA;AAAA,MACA,uFAAA;AAAA,MACA,yDAAA;AAAA,MACA,yDAAA;AAAA,MACA,iEAAA;AAAA,MACA,6FAAA;AAAA,MACA;AAAA,KACF,CAAE,KAAK,GAAG;AAAA,GACZ;AAEA,EAAA,MAAM,cAAcD,qBAAAA,CAAQ,WAAA,EAAa,aAAa,MAAA,GAAS,QAAA,GAAW,SAAS,CAAC,CAAA;AAEpF,EAAA,uBACEC,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,WAAA;AAAA,MACb,WAAA,EAAU,WAAA;AAAA,MACV,OAAA;AAAA,MACA,SAAA,EAAW,WAAA;AAAA,MAEX,QAAA,kBAAAA,cAAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACC,cAAA,EAAa,iBAAA;AAAA,UACb,WAAA,EAAU,iBAAA;AAAA,UAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA,GACF;AAEJ;AC3FA,IAAM,cAAA,GAA4D;AAAA,EAChE,KAAA,EAAO;AAAA,IACL,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS;AAAA,GACX;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,OAAA,EAAS;AAAA,GACX;AAAA,EACA,OAAA,EAAS;AAAA,IACP,OAAA,EAAS;AAAA;AAEb,CAAA;AAGA,IAAM,WAAA,GAAkF;AAAA,EACtF,KAAA,EAAO;AAAA,IACL,WAAA,EAAa,8CAAA;AAAA,IACb,WAAA,EAAa;AAAA,GACf;AAAA,EACA,OAAA,EAAS;AAAA,IACP,WAAA,EAAa,gDAAA;AAAA,IACb,WAAA,EAAa;AAAA,GACf;AAAA,EACA,IAAA,EAAM;AAAA,IACJ,WAAA,EAAa,6CAAA;AAAA,IACb,WAAA,EAAa;AAAA,GACf;AAAA,EACA,OAAA,EAAS;AAAA,IACP,WAAA,EAAa,gDAAA;AAAA,IACb,WAAA,EAAa;AAAA;AAEjB,CAAA;AAMO,SAAS,kBAAA,CAAoB;AAAA,EAClC,OAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,MAAM,EAAE,OAAA,EAAQ,GAAI,cAAA,CAAe,OAAO,CAAA;AAC1C,EAAA,MAAM,EAAE,WAAA,EAAa,WAAA,EAAY,GAAI,YAAY,OAAO,CAAA;AAExD,EAAA,MAAM,cAAA,GAAiBD,qBAAAA;AAAA,IACrB,oEAAA;AAAA,IACA,8BAAA;AAAA,IACA,gDAAA;AAAA,IACA,QAAA;AAAA,IACA,iBAAA;AAAA,IACA;AAAA,GACF;AAEA,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,qBAAA;AAAA,MACb,WAAA,EAAU,qBAAA;AAAA,MACV,IAAA,EAAK,OAAA;AAAA,MACL,SAAA,EAAW,cAAA;AAAA,MAGX,QAAA,EAAA;AAAA,wBAAAF,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,4BAAA;AAAA,YACb,WAAA,EAAU,4BAAA;AAAA,YACV,SAAA,EAAWD,qBAAAA;AAAA,cACT,gIAAA;AAAA,cACA;AAAA;AACF;AAAA,SACF;AAAA,wBAGAC,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,yBAAA;AAAA,YACb,WAAA,EAAU,yBAAA;AAAA,YACV,SAAA,EAAWD,qBAAAA,CAAQ,gFAAA,EAAkF,WAAW;AAAA;AAAA,SAClH;AAAA,wBAGAC,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,6BAAA;AAAA,YACb,WAAA,EAAU,6BAAA;AAAA,YACV,SAAA,EAAU,mIAAA;AAAA,YAET,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAGC,0BACCE,eAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,4BAAA;AAAA,YACb,WAAA,EAAU,4BAAA;AAAA,YACV,OAAA,EAAS,MAAM,MAAA,CAAO,OAAA,EAAQ;AAAA,YAC9B,SAAA,EAAWH,qBAAAA;AAAA,cACT,2RAAA;AAAA,cACA;AAAA,aACF;AAAA,YAEC,QAAA,EAAA;AAAA,cAAA,MAAA,CAAO,KAAA;AAAA,cAAM;AAAA;AAAA;AAAA,SAChB;AAAA,QAID,6BACCC,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,6BAAA;AAAA,YACb,WAAA,EAAU,6BAAA;AAAA,YACV,OAAA,EAAS,SAAA;AAAA,YACT,YAAA,EAAW,sBAAA;AAAA,YACX,SAAA,EAAU,wOAAA;AAAA,YAEV,QAAA,kBAAAE,eAAAA;AAAA,cAAC,KAAA;AAAA,cAAA;AAAA,gBACC,KAAA,EAAM,IAAA;AAAA,gBACN,MAAA,EAAO,IAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBACR,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,WAAA,EAAY,KAAA;AAAA,gBACZ,aAAA,EAAc,OAAA;AAAA,gBACd,aAAA,EAAY,MAAA;AAAA,gBAEZ,QAAA,EAAA;AAAA,kCAAAF,cAAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,kCACpCA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK;AAAA;AAAA;AAAA;AACtC;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;ACxHO,SAAS,cAAe,EAAE,KAAA,EAAO,OAAA,EAAS,QAAA,GAAW,OAAM,EAAuB;AA1BzF,EAAA,IAAA,EAAA;AA2BE,EAAA,MAAM,KAAA,GAAQ,MAAM,OAAA,GAChB;AAAA,IACE,MAAM,KAAA,CAAM,OAAA;AAAA,IACZ,KAAA,EAAA,CAAO,EAAA,GAAA,KAAA,CAAM,YAAA,KAAN,IAAA,GAAA,EAAA,GAAsB,6CAAA;AAAA,IAC7B,SAAS,KAAA,CAAM;AAAA,GACjB,GACA,MAAA;AAEJ,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,qCAAA;AAAA,IACA,wDAAA;AAAA,IACA,gDAAA;AAAA,IACA,+CAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,sCAAA;AAAA,IACA,eAAA;AAAA,IACA,WAAW,gBAAA,GAAmB;AAAA,GAChC,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEE,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,gBAAA;AAAA,MACb,WAAA,EAAU,gBAAA;AAAA,MACV,OAAA,EAAS,CAAC,QAAA,GAAW,OAAA,GAAU,MAAA;AAAA,MAC/B,QAAA;AAAA,MACA,cAAY,CAAA,8BAAA,EAA4B,KAAA,CAAM,MAAM,CAAA,IAAA,EAAO,MAAM,OAAO,CAAA,CAAA;AAAA,MACxE,SAAA,EAAWH,sBAAQ,WAAW,CAAA;AAAA,MAE9B,QAAA,EAAA;AAAA,wBAAAC,cAAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,qBAAA;AAAA,YACb,WAAA,EAAU,qBAAA;AAAA,YACV,KAAA;AAAA,YACA,IAAA,EAAM,EAAA;AAAA,YACN,KAAA;AAAA,YACA,SAAA,EAAW;AAAA;AAAA,SACb;AAAA,wBAEAE,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,qBAAA;AAAA,YACb,WAAA,EAAU,qBAAA;AAAA,YACV,SAAA,EAAU,mCAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAF,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,uBAAA;AAAA,kBACb,WAAA,EAAU,uBAAA;AAAA,kBACV,SAAA,EAAW;AAAA,oBACT,oFAAA;AAAA,oBACA,0CAAA;AAAA,oBACA,WAAW,yDAAA,GAA4D;AAAA,mBACzE,CAAE,KAAK,GAAG,CAAA;AAAA,kBAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,eACT;AAAA,8BACAA,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,wBAAA;AAAA,kBACb,WAAA,EAAU,wBAAA;AAAA,kBACV,SAAA,EAAU,8MAAA;AAAA,kBAET,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT;AAAA;AAAA,SACF;AAAA,QAGC,CAAC,4BACAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,wBAAA;AAAA,YACb,WAAA,EAAU,wBAAA;AAAA,YACV,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,KAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YACf,SAAA,EAAU,uEAAA;AAAA,YACV,aAAA,EAAY,MAAA;AAAA,YAEZ,QAAA,kBAAAA,cAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,gBAAA,EAAiB;AAAA;AAAA;AACpC;AAAA;AAAA,GAEJ;AAEJ;ACzFO,SAAS,WAAA,CAAa;AAAA,EAC3B,KAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,QAAA,GAAW;AACb,CAAA,EAAqB;AACnB,EAAA,MAAM,OAAA,GAAU,CAAC,KAAA,IAAS,KAAA,KAAU,OAAO,KAAA,KAAU,EAAA;AAErD,EAAA,MAAM,YAAA,GAAe;AAAA,IACnB,yCAAA;AAAA,IACA,YAAA;AAAA,IACA,wFAAA;AAAA,IACA,sGAAA;AAAA,IACA,0CAAA;AAAA,IACA,UAAU,wDAAA,GAA2D,uDAAA;AAAA,IACrE,QAAA,IAAY,WAAW,gBAAA,GAAmB;AAAA,GAC5C,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEE,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,sBAAA;AAAA,MACb,WAAA,EAAU,sBAAA;AAAA,MACV,SAAA,EAAU,wCAAA;AAAA,MAEV,QAAA,EAAA;AAAA,wBAAAF,cAAAA;AAAA,UAAC,OAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,cAAA;AAAA,YACb,WAAA,EAAU,cAAA;AAAA,YACV,IAAA,EAAK,MAAA;AAAA,YACL,SAAA,EAAU,SAAA;AAAA,YACV,OAAO,KAAA,IAAS,EAAA;AAAA,YAChB,QAAA;AAAA,YACA,QAAA;AAAA,YACA,WAAA,EAAY,GAAA;AAAA,YACZ,QAAA,EAAU,CAAC,CAAA,KAAM;AACf,cAAA,MAAM,CAAA,GAAI,EAAE,MAAA,CAAO,KAAA;AAEnB,cAAA,IAAI,mBAAA,CAAoB,IAAA,CAAK,CAAC,CAAA,IAAK,MAAM,EAAA,EAAI;AAC3C,gBAAA,QAAA,CAAS,CAAC,CAAA;AAAA,cACZ;AAAA,YACF,CAAA;AAAA,YACA,SAAA,EAAWD,sBAAQ,YAAY;AAAA;AAAA,SACjC;AAAA,QACC,iCACCC,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,yBAAA;AAAA,YACb,WAAA,EAAU,yBAAA;AAAA,YACV,SAAA,EAAU,wJAAA;AAAA,YAET,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,GAEJ;AAEJ;AC5DO,SAAS,mBAAA,CAAqB,EAAE,OAAA,EAAS,QAAA,GAAW,OAAM,EAA6B;AAE5F,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAUyB,2BAAS,KAAK,CAAA;AAElD,EAAA,MAAM,WAAA,GAAc;AAAA,IAClB,yCAAA;AAAA,IACA,WAAA;AAAA,IACA,gDAAA;AAAA,IACA,+CAAA;AAAA,IACA,oEAAA;AAAA,IACA,cAAA;AAAA,IACA,eAAA;AAAA,IACA,gGAAA;AAAA,IACA,WAAW,uEAAA,GAA0E;AAAA,GACvF,CAAE,KAAK,GAAG,CAAA;AAEV,EAAA,uBACEzB,cAAAA;AAAA,IAACQ,mBAAAA,CAAO,MAAA;AAAA,IAAP;AAAA,MACC,cAAA,EAAa,uBAAA;AAAA,MACb,WAAA,EAAU,uBAAA;AAAA,MACV,OAAA,EAAS,CAAC,QAAA,GAAW,OAAA,GAAU,MAAA;AAAA,MAC/B,YAAA,EAAc,MAAM,UAAA,CAAW,IAAI,CAAA;AAAA,MACnC,YAAA,EAAc,MAAM,UAAA,CAAW,KAAK,CAAA;AAAA,MACpC,QAAA;AAAA,MACA,OAAA,EAAS,EAAE,MAAA,EAAQ,OAAA,GAAU,MAAM,CAAA,EAAE;AAAA,MACrC,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAM,MAAM,WAAA,EAAY;AAAA,MAChD,YAAA,EAAW,gBAAA;AAAA,MACX,SAAA,EAAWT,sBAAQ,WAAW,CAAA;AAAA,MAE9B,QAAA,kBAAAG,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,cAAA,EAAa,4BAAA;AAAA,UACb,WAAA,EAAU,4BAAA;AAAA,UACV,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,OAAA,EAAQ,WAAA;AAAA,UACR,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,KAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe,OAAA;AAAA,UACf,aAAA,EAAY,MAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,UAAK,EAAA,EAAG,IAAA,EAAK,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,4BACrCA,cAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,kBAAA,EAAmB;AAAA;AAAA;AAAA;AACtC;AAAA,GACF;AAEJ;AC7BO,SAAS,cAAA,CAAgB;AAAA,EAC9B,KAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,KAAA,GAAQ,IAAA;AAAA,EACR,aAAA;AAAA,EACA;AACF,CAAA,EAAwB;AACtB,EAAA,MAAM,WAAW,KAAA,KAAU,sBAAA;AAE3B,EAAA,MAAM,cAAA,GAAiBD,qBAAAA;AAAA,IACrB,gDAAA;AAAA,IACA,QAAA;AAAA,IACA,2FAAA;AAAA,IACA,mDAAA;AAAA,IACA,WACI,iLAAA,GACA;AAAA,GACN;AAEA,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,kBAAA;AAAA,MACb,WAAA,EAAU,kBAAA;AAAA,MACV,YAAA,EAAc,MAAM,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAgB,IAAA,CAAA;AAAA,MACpC,YAAA,EAAc,MAAM,aAAA,IAAA,IAAA,GAAA,MAAA,GAAA,aAAA,CAAgB,KAAA,CAAA;AAAA,MACpC,SAAA,EAAW,cAAA;AAAA,MAGX,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,0BAAA;AAAA,YACb,WAAA,EAAU,0BAAA;AAAA,YACV,SAAA,EAAU,2DAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAF,cAAAA;AAAA,gBAAC,aAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,2BAAA;AAAA,kBACb,WAAA,EAAU,2BAAA;AAAA,kBACV,KAAA;AAAA,kBACA,OAAA,EAAS,aAAA;AAAA,kBACT,UAAU,CAAC;AAAA;AAAA,eACb;AAAA,8BAGAA,cAAAA;AAAA,gBAAC,KAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,0BAAA;AAAA,kBACb,WAAA,EAAU,0BAAA;AAAA,kBACV,SAAA,EAAU;AAAA;AAAA,eACZ;AAAA,8BAEAA,cAAAA;AAAA,gBAAC,WAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,yBAAA;AAAA,kBACb,WAAA,EAAU,yBAAA;AAAA,kBACV,KAAA,EAAO,MAAA;AAAA,kBACP,QAAA,EAAU,2CAAmB,MAAM;AAAA,kBAAC,CAAA,CAAA;AAAA,kBACpC,aAAA;AAAA,kBACA,QAAA;AAAA,kBACA,QAAA,EAAU,CAAC,cAAA,IAAkB,CAAC;AAAA;AAAA;AAChC;AAAA;AAAA,SACF;AAAA,QAAA,CAGE,OAAA,KAAY,MAAA,IAAa,aAAA,qBACzBA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,8BAAA;AAAA,YACb,WAAA,EAAU,8BAAA;AAAA,YACV,SAAA,EAAU,0EAAA;AAAA,YAEV,QAAA,kBAAAE,eAAAA;AAAA,cAAC,MAAA;AAAA,cAAA;AAAA,gBACC,cAAA,EAAa,gCAAA;AAAA,gBACb,WAAA,EAAU,gCAAA;AAAA,gBACV,SAAA,EAAU,6GAAA;AAAA,gBACX,QAAA,EAAA;AAAA,kBAAA,QAAA;AAAA,kBACQ,GAAA;AAAA,kCACPA,eAAAA;AAAA,oBAAC,MAAA;AAAA,oBAAA;AAAA,sBACC,cAAA,EAAa,gCAAA;AAAA,sBACb,WAAA,EAAU,gCAAA;AAAA,sBACV,SAAA,EAAW,WAAW,sDAAA,GAAyD,yDAAA;AAAA,sBAE9E,QAAA,EAAA;AAAA,wBAAA,OAAA,IAAA,IAAA,GAAA,OAAA,GAAW,GAAA;AAAA,wBAAI,GAAA;AAAA,wBAAE,wCAAiB,KAAA,CAAM;AAAA;AAAA;AAAA;AAC3C;AAAA;AAAA;AACF;AAAA,SACF;AAAA,QAID,6BACCF,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,6BAAA;AAAA,YACb,WAAA,EAAU,6BAAA;AAAA,YACV,SAAA,EAAU,wCAAA;AAAA,YAET,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAID,4BACCA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,wBAAA;AAAA,YACb,WAAA,EAAU,wBAAA;AAAA,YACV,SAAA,EAAU,wCAAA;AAAA,YAEV,QAAA,kBAAAA,cAAAA;AAAA,cAAC,kBAAA;AAAA,cAAA;AAAA,gBACC,OAAA,EAAQ,OAAA;AAAA,gBACR,OAAA,EAAQ,2CAAA;AAAA,gBACR,MAAA,EAAQ;AAAA,kBACN,KAAA,EAAO,mBAAA;AAAA,kBACP,SAAS,MAAM;AAAA,kBAAC;AAAA;AAClB;AAAA;AACF;AAAA;AACF;AAAA;AAAA,GAEJ;AAEJ;;;ACvJO,IAAM,CAAA,GAAI;AAAA,EAEf,MAAA,EAAQ,0CAAA;AAAA,EAER,MAAA,EAAQ,8CAAA;AAAA,EACR,WAAA,EAAa,0CAAA;AAAA,EACb,aAAA,EAAe,4CAAA;AAAA,EAEf,KAAA,EAAO,2CAAA;AAAA,EAGP,WAAA,EAAa,sCAKf,CAAA;ACEO,IAAM,sBAAA,GAGT;AAAA,EACF,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,gCAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,OAAA,EAAS;AAAA,IACP,KAAA,EAAO,iBAAA;AAAA,IACP,QAAA,EAAU;AAAA,GACZ;AAAA,EACA,KAAA,EAAO;AAAA,IACL,KAAA,EAAO,cAAA;AAAA,IACP,QAAA,EAAU;AAAA;AAEd,CAAA;AA8BO,SAAS,mBAAA,CAAqB;AAAA,EACnC,OAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA,GAAa;AACf,CAAA,EAA6B;AAC3B,EAAA,MAAM,QAAA,GAAW,uBAAuB,OAAO,CAAA;AAC/C,EAAA,MAAM,aAAA,GAAgB,wBAAS,QAAA,CAAS,KAAA;AACxC,EAAA,MAAM,gBAAA,GAAmB,8BAAY,QAAA,CAAS,QAAA;AAE9C,EAAA,MAAM,YAAY,OAAA,KAAY,SAAA;AAE9B,EAAA,MAAM,0BACJE,eAAAA;AAAA,IAACM,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,cAAA,EAAa,uBAAA;AAAA,MACb,WAAA,EAAU,uBAAA;AAAA,MAEV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACtB,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAE;AAAA,MACnB,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAI;AAAA,MAC5B,KAAA,EAAO;AAAA,QACL,QAAA,EAAU,aAAa,UAAA,GAAa,UAAA;AAAA,QACpC,KAAA,EAAO,aAAa,MAAA,GAAY,CAAA;AAAA,QAChC,YAAA,EAAc,SAAA;AAAA,QACd,cAAA,EAAgB,YAAA;AAAA,QAChB,oBAAA,EAAsB,YAAA;AAAA,QACtB,UAAA,EAAY,6EAAA;AAAA,QACZ,MAAA,EAAQ,EAAA;AAAA,QACR,OAAA,EAAS,MAAA;AAAA,QACT,aAAA,EAAe,QAAA;AAAA,QACf,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,GAAA,EAAK,EAAA;AAAA,QACL,OAAA,EAAS,aAAa,WAAA,GAAc,WAAA;AAAA,QACpC,UAAA,EAAY;AAAA,OACd;AAAA,MAGC,QAAA,EAAA;AAAA,QAAA,SAAA,oBAAaR,eAAC,WAAA,EAAA,EAAY,CAAA;AAAA,QAC1B,OAAA,KAAY,SAAA,oBAAaA,cAAAA,CAAC,WAAA,EAAA,EAAY,CAAA;AAAA,QACtC,OAAA,KAAY,OAAA,oBAAWA,cAAAA,CAAC,SAAA,EAAA,EAAU,CAAA;AAAA,wBAGnCE,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,oBAAA;AAAA,YACb,WAAA,EAAU,oBAAA;AAAA,YACV,KAAA,EAAO;AAAA,cACL,OAAA,EAAS,MAAA;AAAA,cACT,aAAA,EAAe,QAAA;AAAA,cACf,UAAA,EAAY,QAAA;AAAA,cACZ,GAAA,EAAK,CAAA;AAAA,cACL,SAAA,EAAW;AAAA,aACb;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAAF,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,qBAAA;AAAA,kBACb,WAAA,EAAU,qBAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACL,QAAA,EAAU,YAAY,EAAA,GAAK,EAAA;AAAA,oBAC3B,UAAA,EAAY,YAAY,GAAA,GAAM,GAAA;AAAA,oBAC9B,aAAA,EAAe,YAAY,QAAA,GAAW,MAAA;AAAA,oBACtC,aAAA,EAAe,YAAY,WAAA,GAAc,MAAA;AAAA,oBACzC,KAAA,EAAO,SAAA,GAAY,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,WAAA;AAAA,oBAC/B,UAAA,EAAY;AAAA,mBACd;AAAA,kBAEC,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,8BAEAA,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,wBAAA;AAAA,kBACb,WAAA,EAAU,wBAAA;AAAA,kBACV,KAAA,EAAO;AAAA,oBACL,QAAA,EAAU,EAAA;AAAA,oBACV,UAAA,EAAY,GAAA;AAAA,oBACZ,OAAO,CAAA,CAAE,aAAA;AAAA,oBACT,UAAA,EAAY,GAAA;AAAA,oBACZ,QAAA,EAAU;AAAA,mBACZ;AAAA,kBAEC,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA;AACF;AAAA,KAAA;AAAA,IAnEI;AAAA,GAoEN;AAGF,EAAA,IAAI,UAAA,EAAY;AACd,IAAA,uBACEA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAA,EAAO;AAAA,UACL,KAAA,EAAO,MAAA;AAAA,UACP,cAAc,CAAA,CAAE,WAAA;AAAA,UAChB,QAAA,EAAU,QAAA;AAAA,UACV,MAAA,EAAQ,CAAA,UAAA,EAAa,CAAA,CAAE,MAAM,CAAA,CAAA;AAAA,UAC7B,YAAY,CAAA,CAAE;AAAA,SAChB;AAAA,QAEC,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAEA,EAAA,OAAO,OAAA;AACT;AAiBA,SAAS,WAAA,GAAe;AACtB,EAAA,MAAM,QAAQ,CAAA,CAAE,KAAA;AAChB,EAAA,MAAM,UAAA,GAAa,gFAAA;AACnB,EAAA,MAAM,EAAA,GAAK,GAAA;AACX,EAAA,MAAM,EAAA,GAAK,GAAA;AAEX,EAAA,uBACEE,eAAAA;AAAA,IAACM,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,cAAA,EAAa,4BAAA;AAAA,MACb,WAAA,EAAU,4BAAA;AAAA,MACV,KAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,aAAA,EAAY,MAAA;AAAA,MACZ,OAAA,EAAS,EAAE,MAAA,EAAQ,GAAA,EAAI;AAAA,MACvB,YAAY,EAAE,QAAA,EAAU,KAAK,MAAA,EAAQ,QAAA,EAAU,MAAM,QAAA,EAAS;AAAA,MAG9D,QAAA,EAAA;AAAA,wBAAAR,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,IAAA,EAAK,MAAA,EAAQ,UAAA,EAAY,WAAA,EAAa,EAAA,EAAI,CAAA;AAAA,wBAGpEA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,wCAAA;AAAA,YACF,MAAA,EAAQ,KAAA;AAAA,YACR,WAAA,EAAa,EAAA;AAAA,YACb,aAAA,EAAc;AAAA;AAAA,SAChB;AAAA,wBAEAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,uCAAA;AAAA,YACF,MAAA,EAAQ,KAAA;AAAA,YACR,WAAA,EAAa,EAAA;AAAA,YACb,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe;AAAA;AAAA,SACjB;AAAA,wBAGAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,wCAAA;AAAA,YACF,MAAA,EAAQ,KAAA;AAAA,YACR,WAAA,EAAa,EAAA;AAAA,YACb,aAAA,EAAc;AAAA;AAAA,SAChB;AAAA,wBAEAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,CAAA,EAAE,qCAAA;AAAA,YACF,MAAA,EAAQ,KAAA;AAAA,YACR,WAAA,EAAa,EAAA;AAAA,YACb,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe;AAAA;AAAA;AACjB;AAAA;AAAA,GACF;AAEJ;AAIA,SAAS,WAAA,GAAe;AACtB,EAAA,uBACEA,cAAAA;AAAA,IAACQ,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,cAAA,EAAa,4BAAA;AAAA,MACb,WAAA,EAAU,4BAAA;AAAA,MACV,OAAA,EAAS,EAAE,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA,EAAE;AAAA,MACnC,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,MAChC,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,KAAA,EAAO,IAAA,EAAK;AAAA,MACvE,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,EAAA;AAAA,QACP,MAAA,EAAQ,EAAA;AAAA,QACR,YAAA,EAAc,KAAA;AAAA,QACd,UAAA,EAAY,2CAAA;AAAA,QACZ,SAAA,EAAW,oLAAA;AAAA,QACX,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,UAAA,EAAY;AAAA,OACd;AAAA,MAEA,QAAA,kBAAAR,cAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,aAAA,EAAY,QACtE,QAAA,kBAAAA,cAAAA;AAAA,QAACQ,mBAAAA,CAAO,IAAA;AAAA,QAAP;AAAA,UACC,CAAA,EAAE,sBAAA;AAAA,UACF,MAAA,EAAO,OAAA;AAAA,UACP,WAAA,EAAY,KAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe,OAAA;AAAA,UACf,OAAA,EAAS,EAAE,UAAA,EAAY,CAAA,EAAE;AAAA,UACzB,OAAA,EAAS,EAAE,UAAA,EAAY,CAAA,EAAE;AAAA,UACzB,YAAY,EAAE,QAAA,EAAU,MAAM,KAAA,EAAO,GAAA,EAAK,MAAM,SAAA;AAAU;AAAA,OAC5D,EACF;AAAA;AAAA,GACF;AAEJ;AAIA,IAAM,SAAA,GAAY,yCAAA;AAElB,SAAS,SAAA,GAAa;AACpB,EAAA,uBACER,cAAAA;AAAA,IAACQ,mBAAAA,CAAO,GAAA;AAAA,IAAP;AAAA,MACC,cAAA,EAAa,0BAAA;AAAA,MACb,WAAA,EAAU,0BAAA;AAAA,MACV,OAAA,EAAS,EAAE,KAAA,EAAO,IAAA,EAAM,SAAS,CAAA,EAAE;AAAA,MACnC,OAAA,EAAS,EAAE,KAAA,EAAO,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,MAChC,UAAA,EAAY,EAAE,IAAA,EAAM,QAAA,EAAU,WAAW,GAAA,EAAK,OAAA,EAAS,EAAA,EAAI,KAAA,EAAO,IAAA,EAAK;AAAA,MACvE,KAAA,EAAO;AAAA,QACL,KAAA,EAAO,EAAA;AAAA,QACP,MAAA,EAAQ,EAAA;AAAA,QACR,YAAA,EAAc,KAAA;AAAA,QACd,UAAA,EAAY,SAAA;AAAA,QACZ,SAAA,EAAW,gLAAA;AAAA,QACX,OAAA,EAAS,MAAA;AAAA,QACT,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,UAAA,EAAY;AAAA,OACd;AAAA,MAEA,QAAA,kBAAAN,eAAAA,CAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,IAAA,EAAK,OAAA,EAAQ,WAAA,EAAY,IAAA,EAAK,MAAA,EAAO,aAAA,EAAY,MAAA,EACtE,QAAA,EAAA;AAAA,wBAAAF,cAAAA;AAAA,UAACQ,mBAAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,EAAA,EAAG,IAAA;AAAA,YAAK,EAAA,EAAG,IAAA;AAAA,YAAK,EAAA,EAAG,IAAA;AAAA,YAAK,EAAA,EAAG,IAAA;AAAA,YAC3B,MAAA,EAAO,OAAA;AAAA,YACP,WAAA,EAAY,KAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,OAAA,EAAS,EAAE,UAAA,EAAY,CAAA,EAAE;AAAA,YACzB,OAAA,EAAS,EAAE,UAAA,EAAY,CAAA,EAAE;AAAA,YACzB,YAAY,EAAE,QAAA,EAAU,MAAM,KAAA,EAAO,GAAA,EAAK,MAAM,SAAA;AAAU;AAAA,SAC5D;AAAA,wBACAR,cAAAA;AAAA,UAACQ,mBAAAA,CAAO,IAAA;AAAA,UAAP;AAAA,YACC,EAAA,EAAG,IAAA;AAAA,YAAK,EAAA,EAAG,IAAA;AAAA,YAAK,EAAA,EAAG,IAAA;AAAA,YAAK,EAAA,EAAG,IAAA;AAAA,YAC3B,MAAA,EAAO,OAAA;AAAA,YACP,WAAA,EAAY,KAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,OAAA,EAAS,EAAE,UAAA,EAAY,CAAA,EAAE;AAAA,YACzB,OAAA,EAAS,EAAE,UAAA,EAAY,CAAA,EAAE;AAAA,YACzB,YAAY,EAAE,QAAA,EAAU,MAAM,KAAA,EAAO,IAAA,EAAM,MAAM,SAAA;AAAU;AAAA;AAC7D,OAAA,EACF;AAAA;AAAA,GACF;AAEJ;AC9SO,SAAS,SAAA,CAAW;AAAA,EACzB,SAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA;AAAA,EACA,kBAAA;AAAA,EACA,sBAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,iBAAA;AAAA,EACA,eAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,eAAA;AAAA,EACd,cAAA,GAAiB,KAAA;AAAA,EACjB,SAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,KAAA,GAAQ,IAAA;AAAA,EACR,QAAA,GAAW;AACb,CAAA,EAAmB;AAEjB,EAAA,MAAM,CAAC,eAAA,EAAiB,kBAAkB,CAAA,GAAUkB,2BAAS,KAAK,CAAA;AAClE,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAUA,2BAAwB,IAAI,CAAA;AAGxE,EAAA,MAAM,YAAA,GAAqBA,yBAAkD,MAAS,CAAA;AAEtF,EAAA,SAAS,gBAAA,GAAoB;AAC3B,IAAA,YAAA,CAAa,aAAa,OAAO,CAAA;AACjC,IAAA,kBAAA,CAAmB,IAAI,CAAA;AAAA,EACzB;AAEA,EAAA,SAAS,cAAA,GAAkB;AACzB,IAAA,YAAA,CAAa,UAAU,UAAA,CAAW,MAAM,kBAAA,CAAmB,KAAK,GAAG,GAAG,CAAA;AAAA,EACxE;AAGA,EAAMA,iBAAA,CAAA,SAAA,CAAU,MAAM,MAAM,YAAA,CAAa,aAAa,OAAO,CAAA,EAAG,EAAE,CAAA;AAElE,EAAA,MAAM,mBACJ,cAAA,IAAkB,OAAA,IAAW,CAAC,UAAA,IAAc,UAAA,KAAe,OAAO,UAAA,KAAe,EAAA;AAGnF,EAAA,SAAS,gBAAiB,GAAA,EAAa;AACrC,IAAA,cAAA,CAAe,GAAG,CAAA;AAClB,IAAA,sBAAA,IAAA,IAAA,GAAA,MAAA,GAAA,sBAAA,CAAyB,GAAA,CAAA;AACzB,IAAA,IAAI,CAAC,WAAA,EAAa;AAClB,IAAA,MAAM,MAAM,UAAA,CAAW,WAAA,CAAY,OAAA,CAAQ,SAAA,EAAW,EAAE,CAAC,CAAA;AACzD,IAAA,IAAI,KAAA,CAAM,GAAG,CAAA,EAAG;AAChB,IAAA,MAAM,QAAA,GAAA,CAAa,MAAM,GAAA,GAAO,GAAA,EAAK,QAAQ,CAAC,CAAA,CAAE,OAAA,CAAQ,QAAA,EAAU,EAAE,CAAA;AACpE,IAAA,kBAAA,CAAmB,QAAQ,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,aAAA,GAAgB3B,qBAAAA;AAAA,IACpB,uBAAA;AAAA,IACA,gDAAA;AAAA,IACA,aAAA;AAAA,IACA,sEAAA;AAAA,IACA,4CAAA;AAAA,IACA,0EAAA;AAAA,IACA,0CAAA;AAAA,IACA,mBACI,2IAAA,GACA;AAAA,GACN;AAEA,EAAA,uBACEG,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,YAAA;AAAA,MACb,WAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAU,2VAAA;AAAA,MAGT,QAAA,EAAA;AAAA,QAAA,SAAA,oBACCF,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,oBAAA;AAAA,YACb,WAAA,EAAU,oBAAA;AAAA,YACV,SAAA,EAAU,sEAAA;AAAA,YAEV,QAAA,kBAAAA,cAAAA,CAAC,aAAA,EAAA,EAAc,OAAA,EAAS,SAAA,EAAW;AAAA;AAAA,SACrC;AAAA,wBAIFA,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,MAAM,SAAA,CAAU,IAAA;AAAA,cAChB,QAAQ,SAAA,CAAU,MAAA;AAAA,cAClB,OAAO,SAAA,CAAU,KAAA;AAAA,cACjB,SAAS,SAAA,CAAU,OAAA;AAAA,cACnB,SAAS,SAAA,CAAU,OAAA;AAAA,cACnB,cAAc,SAAA,CAAU,YAAA;AAAA,cACxB,gBAAgB,SAAA,CAAU;AAAA,aAC5B;AAAA,YACA,MAAA,EAAQ,UAAA;AAAA,YACR,cAAA,EAAgB,CAAC,CAAA,KAAM;AACrB,cAAA,cAAA,CAAe,IAAI,CAAA;AACnB,cAAA,kBAAA,CAAmB,CAAC,CAAA;AAAA,YACtB,CAAA;AAAA,YACA,OAAA,EAAS,WAAA;AAAA,YACT,aAAA,EAAe,iBAAA;AAAA,YACf,aAAA,EAAe,iBAAA;AAAA,YACf,aAAA,EAAe,iBAAA;AAAA,YACf,KAAA;AAAA,YACA,eAAe,CAAC,CAAA,KAAO,CAAA,GAAI,gBAAA,KAAqB,cAAA,EAAe;AAAA,YAC/D,2BACEA,cAAAA,CAACU,4BAAAA,EAAA,EACE,6CACCV,cAAAA;AAAA,cAACQ,mBAAAA,CAAO,GAAA;AAAA,cAAP;AAAA,gBACC,cAAA,EAAa,sBAAA;AAAA,gBACb,WAAA,EAAU,sBAAA;AAAA,gBAEV,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,gBAC7B,OAAA,EAAS,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,CAAA,EAAE;AAAA,gBAC5B,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,gBAC1B,UAAA,EAAY,EAAE,QAAA,EAAU,IAAA,EAAK;AAAA,gBAE7B,QAAA,kBAAAR,cAAAA;AAAA,kBAAC,eAAA;AAAA,kBAAA;AAAA,oBACC,QAAA,EAAU,WAAA;AAAA,oBACV,QAAA,EAAU;AAAA;AAAA;AACZ,eAAA;AAAA,cATI;AAAA,aAUN,EAEJ;AAAA;AAAA,SAEJ;AAAA,wBAGAA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,0BAAA;AAAA,YACb,WAAA,EAAU,0BAAA;AAAA,YACV,SAAA,EAAU,4EAAA;AAAA,YAEV,0BAAAA,cAAAA,CAAC,mBAAA,EAAA,EAAoB,SAAS,YAAA,EAAc,QAAA,EAAU,CAAC,YAAA,EAAc;AAAA;AAAA,SACvE;AAAA,wBAGAA,cAAAA;AAAA,UAAC,cAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO;AAAA,cACL,MAAM,OAAA,CAAQ,IAAA;AAAA,cACd,QAAQ,OAAA,CAAQ,MAAA;AAAA,cAChB,OAAO,OAAA,CAAQ,KAAA;AAAA,cACf,SAAS,OAAA,CAAQ,OAAA;AAAA,cACjB,SAAS,OAAA,CAAQ,OAAA;AAAA,cACjB,cAAc,OAAA,CAAQ,YAAA;AAAA,cACtB,gBAAgB,OAAA,CAAQ;AAAA,aAC1B;AAAA,YACA,MAAA,EAAQ,QAAA;AAAA,YACR,OAAA,EAAS,SAAA;AAAA,YACT,aAAA,EAAe,eAAA;AAAA,YACf,aAAA,EAAe,eAAA;AAAA,YACf,aAAA,EAAe,eAAA;AAAA,YACf,QAAA,EAAQ;AAAA;AAAA,SACV;AAAA,QAGC,8BACCA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,yBAAA;AAAA,YACb,WAAA,EAAU,yBAAA;AAAA,YACV,SAAA,EAAU,yDAAA;AAAA,YAEV,QAAA,kBAAAA,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAS,UAAA,EAAY;AAAA;AAAA,SACvC;AAAA,wBAIFA,cAAAA;AAAA,UAAC,QAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,mBAAA;AAAA,YACb,WAAA,EAAU,mBAAA;AAAA,YACV,OAAA,EAAS,CAAC,gBAAA,GAAmB,QAAA,GAAW,MAAA;AAAA,YACxC,QAAA,EAAU,gBAAA;AAAA,YACV,KAAA,EAAO,KAAA,KAAU,sBAAA,GAAyB,gCAAA,GAAmC,MAAA;AAAA,YAC7E,SAAA,EAAW,aAAA;AAAA,YAEV,QAAA,EAAA,OAAA,mBAAUA,cAAAA,CAAC,OAAA,EAAA,EAAQ,CAAA,GAAK;AAAA;AAAA,SAC3B;AAAA,wBAGAA,cAAAA,CAACU,4BAAAA,EAAA,EACE,sCACCV,cAAAA;AAAA,UAAC,mBAAA;AAAA,UAAA;AAAA,YAEC,SAAS,QAAA,CAAS,OAAA;AAAA,YAClB,OAAO,QAAA,CAAS,KAAA;AAAA,YAChB,UAAU,QAAA,CAAS;AAAA,WAAA;AAAA,UAHd,QAAA,CAAS;AAAA,SAIhB,EAEJ;AAAA;AAAA;AAAA,GACF;AAEJ;AAQA,SAAS,aAAA,CAAe,EAAE,OAAA,EAAQ,EAAuB;AACvD,EAAA,uBACEA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,gBAAA;AAAA,MACb,WAAA,EAAU,gBAAA;AAAA,MACV,OAAA;AAAA,MACA,YAAA,EAAW,kCAAA;AAAA,MACX,SAAA,EAAWD,qBAAAA;AAAA,QACT,yCAAA;AAAA,QACA,SAAA;AAAA,QACA,gDAAA;AAAA,QACA,aAAA;AAAA,QACA,gBAAA;AAAA,QACA,gBAAA;AAAA,QACA,6FAAA;AAAA,QACA,sCAAA;AAAA,QACA,eAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,kBAAAG,eAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,cAAA,EAAa,qBAAA;AAAA,UACb,WAAA,EAAU,qBAAA;AAAA,UACV,OAAA,EAAQ,WAAA;AAAA,UACR,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,IAAA,EAAK,MAAA;AAAA,UACL,MAAA,EAAO,cAAA;AAAA,UACP,WAAA,EAAY,GAAA;AAAA,UACZ,aAAA,EAAc,OAAA;AAAA,UACd,cAAA,EAAe,OAAA;AAAA,UACf,aAAA,EAAY,MAAA;AAAA,UAEZ,QAAA,EAAA;AAAA,4BAAAF,eAAC,QAAA,EAAA,EAAO,EAAA,EAAG,MAAK,EAAA,EAAG,IAAA,EAAK,GAAE,IAAA,EAAK,CAAA;AAAA,4BAC/BA,cAAAA,CAAC,UAAA,EAAA,EAAS,MAAA,EAAO,kBAAA,EAAmB;AAAA;AAAA;AAAA;AACtC;AAAA,GACF;AAEJ;AAQA,SAAS,cAAA,CAAgB,EAAE,OAAA,EAAQ,EAAwB;AACzD,EAAA,uBACEE,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,iBAAA;AAAA,MACb,WAAA,EAAU,iBAAA;AAAA,MACV,OAAA;AAAA,MACA,SAAA,EAAWH,qBAAAA;AAAA,QACT,oCAAA;AAAA,QACA,uDAAA;AAAA,QACA,kDAAA;AAAA,QACA,oGAAA;AAAA,QACA,gBAAA;AAAA,QACA,+FAAA;AAAA,QACA,gBAAA;AAAA,QACA,wDAAA;AAAA,QACA,oEAAA;AAAA,QACA,cAAA;AAAA,QACA,gBAAA;AAAA,QACA,sCAAA;AAAA,QACA;AAAA,OACF;AAAA,MAGA,QAAA,EAAA;AAAA,wBAAAG,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,sBAAA;AAAA,YACb,WAAA,EAAU,sBAAA;AAAA,YACV,KAAA,EAAM,IAAA;AAAA,YACN,MAAA,EAAO,IAAA;AAAA,YACP,OAAA,EAAQ,WAAA;AAAA,YACR,IAAA,EAAK,MAAA;AAAA,YACL,MAAA,EAAO,cAAA;AAAA,YACP,WAAA,EAAY,KAAA;AAAA,YACZ,aAAA,EAAc,OAAA;AAAA,YACd,cAAA,EAAe,OAAA;AAAA,YACf,aAAA,EAAY,MAAA;AAAA,YAEZ,QAAA,EAAA;AAAA,8BAAAF,cAAAA,CAAC,UAAK,EAAA,EAAG,GAAA,EAAI,IAAG,GAAA,EAAI,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,GAAA,EAAI,CAAA;AAAA,8BACnCA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,8BACrCA,cAAAA,CAAC,MAAA,EAAA,EAAK,EAAA,EAAG,GAAA,EAAI,IAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA;AAAA,8BACrCA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,GAAA,EAAI,EAAA,EAAG,GAAA,EAAI,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO,CAAA;AAAA,8BAC9DA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO,CAAA;AAAA,8BAChEA,cAAAA,CAAC,QAAA,EAAA,EAAO,EAAA,EAAG,IAAA,EAAK,EAAA,EAAG,IAAA,EAAK,CAAA,EAAE,GAAA,EAAI,IAAA,EAAK,cAAA,EAAe,MAAA,EAAO,MAAA,EAAO;AAAA;AAAA;AAAA,SAClE;AAAA,wBACAA,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,uBAAA;AAAA,YACb,WAAA,EAAU,uBAAA;AAAA,YACX,QAAA,EAAA;AAAA;AAAA;AAED;AAAA;AAAA,GACF;AAEJ;AAIA,SAAS,OAAA,GAAW;AAClB,EAAA,uBACEE,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,SAAA;AAAA,MACb,WAAA,EAAU,SAAA;AAAA,MACV,KAAA,EAAM,IAAA;AAAA,MACN,MAAA,EAAO,IAAA;AAAA,MACP,OAAA,EAAQ,WAAA;AAAA,MACR,IAAA,EAAK,MAAA;AAAA,MACL,MAAA,EAAO,cAAA;AAAA,MACP,WAAA,EAAY,KAAA;AAAA,MACZ,aAAA,EAAc,OAAA;AAAA,MACd,SAAA,EAAU,cAAA;AAAA,MACV,aAAA,EAAY,MAAA;AAAA,MAEZ,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,YAAO,EAAA,EAAG,IAAA,EAAK,IAAG,IAAA,EAAK,CAAA,EAAE,IAAA,EAAK,OAAA,EAAQ,KAAA,EAAM,CAAA;AAAA,wBAC7CA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,0BAAA,EAA2B;AAAA;AAAA;AAAA,GACrC;AAEJ;AC1UO,SAAS,oBAAA,CAAsB;AAAA,EACpC,KAAA;AAAA,EACA,KAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA,GAAU;AACZ,CAAA,EAA8B;AAC5B,EAAA,uBACEE,eAAAA,CAAAyB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAAzB,eAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,cAAA,EAAa,wBAAA;AAAA,QACb,WAAA,EAAU,wBAAA;AAAA,QACV,SAAA,EAAU,qFAAA;AAAA,QAEV,QAAA,EAAA;AAAA,0BAAAF,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,cAAA,EAAa,8BAAA;AAAA,cACb,WAAA,EAAU,8BAAA;AAAA,cACV,SAAA,EAAU,8MAAA;AAAA,cAET,QAAA,EAAA;AAAA;AAAA,WACH;AAAA,0BACAA,cAAAA;AAAA,YAAC,MAAA;AAAA,YAAA;AAAA,cACC,cAAA,EAAa,8BAAA;AAAA,cACb,WAAA,EAAU,8BAAA;AAAA,cACV,SAAA,EAAW;AAAA,gBACT,0HAAA;AAAA,gBACA,CAAC,aAAa,uDAAA,GAA0D;AAAA,eAC1E,CAAE,KAAK,GAAG,CAAA;AAAA,cACV,KAAA,EAAO,UAAA,GAAa,EAAE,KAAA,EAAO,YAAW,GAAI,MAAA;AAAA,cAE3C,QAAA,EAAA;AAAA;AAAA;AACH;AAAA;AAAA,KACF;AAAA,IAEC,2BACCA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,cAAA,EAAa,gCAAA;AAAA,QACb,WAAA,EAAU,gCAAA;AAAA,QACV,SAAA,EAAU;AAAA;AAAA;AACZ,GAAA,EAEJ,CAAA;AAEJ;AClCO,SAAS,kBAAA,CAAoB;AAAA,EAClC,KAAA,GAAQ,6BAAA;AAAA,EACR,QAAA;AAAA,EACA,KAAA;AAAA,EACA;AACF,CAAA,EAA4B;AAC1B,EAAA,uBACEE,eAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAa,qBAAA;AAAA,MACb,WAAA,EAAU,qBAAA;AAAA,MACV,SAAA,EAAU,oUAAA;AAAA,MAGV,QAAA,EAAA;AAAA,wBAAAA,eAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,4BAAA;AAAA,YACb,WAAA,EAAU,4BAAA;AAAA,YACV,SAAA,EAAW;AAAA,cACT,mCAAA;AAAA,cACA,WAAW,UAAA,GAAa;AAAA,aAC1B,CAAE,KAAK,GAAG,CAAA;AAAA,YAEV,QAAA,EAAA;AAAA,8BAAAF,cAAAA;AAAA,gBAAC,MAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,2BAAA;AAAA,kBACb,WAAA,EAAU,2BAAA;AAAA,kBACV,SAAA,EAAU,2IAAA;AAAA,kBAET,QAAA,EAAA;AAAA;AAAA,eACH;AAAA,cAEC,2BACCA,cAAAA;AAAA,gBAAC,eAAA;AAAA,gBAAA;AAAA,kBACC,cAAA,EAAa,2BAAA;AAAA,kBACb,WAAA,EAAU,2BAAA;AAAA,kBACV,OAAA,EAAS;AAAA;AAAA;AACX;AAAA;AAAA,SAEJ;AAAA,QAGC,4BACCA,cAAAA;AAAA,UAAC,GAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,8BAAA;AAAA,YACb,WAAA,EAAU,8BAAA;AAAA,YACV,SAAA,EAAU,iLAAA;AAAA,YAET,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,wBAIFA,cAAAA;AAAA,UAAC,KAAA;AAAA,UAAA;AAAA,YACC,cAAA,EAAa,6BAAA;AAAA,YACb,WAAA,EAAU,6BAAA;AAAA,YACV,SAAA,EAAW;AAAA,cACT,wDAAA;AAAA,cACA,WAAW,0CAAA,GAA6C;AAAA,aAC1D,CAAE,KAAK,GAAG;AAAA;AAAA,SACZ;AAAA,QAGC,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,sBAChBA,cAAAA;AAAA,UAAC,oBAAA;AAAA,UAAA;AAAA,YAEC,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,OAAO,IAAA,CAAK,KAAA;AAAA,YACZ,YAAY,IAAA,CAAK,UAAA;AAAA,YACjB,OAAA,EAAS,CAAA,GAAI,KAAA,CAAM,MAAA,GAAS;AAAA,WAAA;AAAA,UAJvB,IAAA,CAAK;AAAA,SAMb;AAAA;AAAA;AAAA,GACH;AAEJ;AAUA,SAAS,gBAAiB,EAAA,EAA4C;AAA5C,EAAA,IAAA,EAAA,GAAA,EAAA,EAAE,EAAA,OAAA,EA9G5B,GA8G0B,EAAA,EAAc,IAAA,GAAA,SAAA,CAAd,IAAc,CAAZ,SAAA,CAAA,CAAA;AAC1B,EAAA,uBACEA,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,OAAA;AAAA,MACA,YAAA,EAAW,iBAAA;AAAA,MACX,SAAA,EAAWD,qBAAAA;AAAA,QACT,yCAAA;AAAA,QACA,SAAA;AAAA,QACA,gDAAA;AAAA,QACA,aAAA;AAAA,QACA,gBAAA;AAAA,QACA,gBAAA;AAAA,QACA,6FAAA;AAAA,QACA,sCAAA;AAAA,QACA,eAAA;AAAA,QACA,cAAA;AAAA,QACA;AAAA;AACF,KAAA,EACI,IAAA,CAAA,EAhBL;AAAA,MAkBC,QAAA,kBAAAC,cAAAA;AAAA,QAAC,KAAA;AAAA,QAAA;AAAA,UACC,cAAA,EAAa,gCAAA;AAAA,UACb,WAAA,EAAU,gCAAA;AAAA,UACV,OAAA,EAAQ,WAAA;AAAA,UACR,KAAA,EAAM,IAAA;AAAA,UACN,MAAA,EAAO,IAAA;AAAA,UACP,IAAA,EAAK,cAAA;AAAA,UACL,aAAA,EAAY,MAAA;AAAA,UAEZ,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,CAAA,EAAE,mNAAA,EAAoN;AAAA;AAAA;AAC9N,KAAA;AAAA,GACF;AAEJ;ACtIO,IAAM,UAAkC,CAAC,EAAE,QAAA,EAAU,YAAA,EAAc,WAAU,KAAM;AACxF,EAAA,MAAM,WAAA,GAAc,sDAAA;AACpB,EAAA,MAAM,aAAA,GAAgB,eAAe,mHAAA,GAAsH,EAAA;AAE3J,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,UAAA,EAAW,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,aAAA,EAAe,SAAS,CAAA,EAClF,QAAA,EACH,CAAA;AAEJ;ACVO,IAAM,SAAA,GAAsC,CAAC,EAAE,QAAA,EAAU,WAAU,KAAM;AAC9E,EAAA,MAAM,WAAA,GAAc,4JAAA;AAEpB,EAAA,uBACEC,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,YAAA,EAAa,WAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EACrE,QAAA,EACH,CAAA;AAEJ;ACPA,IAAM6B,eAAAA,GAAiB;AAAA,EACrB,OAAA,EAAS,uDAAA;AAAA,EACT,OAAA,EAAS,wDAAA;AAAA,EACT,OAAA,EAAS,wDAAA;AAAA,EACT,KAAA,EAAO;AACT,CAAA;AAEO,IAAM,YAAsC,CAAC,EAAE,UAAU,OAAA,GAAU,SAAA,EAAW,WAAU,KAAM;AACnG,EAAA,MAAM,WAAA,GAAc,6JAAA;AAEpB,EAAA,uBACE5B,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,YAAA,EAAa,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa6B,eAAAA,CAAe,OAAO,CAAA,EAAG,SAAS,GAC9F,QAAA,EACH,CAAA;AAEJ;ACfO,IAAM,kBAAkD,CAAC,EAAE,QAAA,EAAU,YAAA,EAAc,WAAU,KAAM;AACxG,EAAA,MAAM,WAAA,GAAc,2CAAA;AACpB,EAAA,MAAM,aAAA,GAAgB,eAAe,mHAAA,GAAsH,EAAA;AAE3J,EAAA,uBACE5B,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,oBAAA,EAAqB,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,aAAA,EAAe,SAAS,CAAA,EAC5F,QAAA,EACH,CAAA;AAEJ;ACVO,IAAM,gBAAA,GAAoD,CAAC,EAAE,QAAA,EAAU,WAAU,KAAM;AAC5F,EAAA,MAAM,WAAA,GAAc,4JAAA;AAEpB,EAAA,uBACEG,gBAAC,KAAA,EAAA,EAAI,cAAA,EAAa,uBAAsB,SAAA,EAAWH,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAAG,QAAA,EAAA;AAAA,IAAA,SAAA;AAAA,IAC/E;AAAA,GAAA,EACL,CAAA;AAEJ;ACRO,IAAM,gBAAA,GAAoD,CAAC,EAAE,QAAA,EAAU,WAAU,KAAM;AAC5F,EAAA,MAAM,WAAA,GAAc,mNAAA;AAEpB,EAAA,uBACEC,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,qBAAA,EAAsB,WAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAC9E,QAAA,EACH,CAAA;AAEJ;ACFO,IAAM,qBAAwD,CAAC;AAAA,EACpE,KAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,SAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAII,yBAAAA,CAAM,SAAS,WAAW,CAAA;AAEtD,EAAA,MAAM,WAAA,GAAc,8DAAA;AAEpB,EAAA,uBACED,gBAAC,KAAA,EAAA,EAAI,cAAA,EAAa,wBAAuB,SAAA,EAAWH,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAChF,QAAA,EAAA;AAAA,oBAAAG,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,SAAA,CAAU,CAAC,MAAM,CAAA;AAAA,QAChC,SAAA,EAAU,2EAAA;AAAA,QACV,eAAA,EAAe,MAAA;AAAA,QACf,cAAY,CAAA,EAAG,MAAA,GAAS,aAAA,GAAgB,WAAW,IAAI,KAAK,CAAA,CAAA;AAAA,QAE5D,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4JAAA,EACb,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,4BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACZ,mCAEGA,cAAAA,CAAC6B,eAAA,EAAA,EAAY,SAAA,EAAU,mEAAkE,CAAA,mBAGzF7B,eAAC8B,iBAAA,EAAA,EAAc,SAAA,EAAU,mEAAkE,CAAA,EAEjG;AAAA,WAAA,EACF,CAAA;AAAA,0BACA9B,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,uNACb,QAAA,EAAA,KAAA,EACH;AAAA;AAAA;AAAA,KACF;AAAA,IACC,MAAA,IAAU;AAAA,GAAA,EACb,CAAA;AAEJ;ACjDO,IAAM,mBAAA,GAA0D,CAAC,EAAE,QAAA,EAAU,WAAU,KAAM;AAClG,EAAA,MAAM,WAAA,GAAc,8PAAA;AAEpB,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,sBAAA,EAAuB,WAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAC/E,QAAA,EACH,CAAA;AAEJ;ACRO,IAAM,WAAA,GAA0C,CAAC,EAAE,QAAA,EAAU,WAAU,KAAM;AAClF,EAAA,MAAM,WAAA,GAAc,+XAAA;AAEpB,EAAA,uBACEC,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,cAAA,EAAe,WAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EACvE,QAAA,EACH,CAAA;AAEJ;ACRO,IAAM,MAAA,GAAgC,CAAC,EAAE,QAAA,EAAU,WAAU,KAAM;AACxE,EAAA,MAAM,WAAA,GAAc,kRAAA;AAEpB,EAAA,uBACEC,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,QAAA,EAAS,WAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EACjE,QAAA,EACH,CAAA;AAEJ;ACPA,IAAM,UAAA,GAAa;AAAA,EACjB,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,IAAM,UAAkC,CAAC,EAAE,UAAU,SAAA,EAAW,GAAA,GAAM,MAAK,KAAM;AACtF,EAAA,MAAM,WAAA,GAAc,eAAA;AAEpB,EAAA,uBACEC,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,UAAA,EAAW,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,UAAA,CAAW,GAAG,CAAA,EAAG,SAAS,GACpF,QAAA,EACH,CAAA;AAEJ;ACfA,IAAMgC,WAAAA,GAAa;AAAA,EACjB,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,IAAM,UAAkC,CAAC,EAAE,UAAU,SAAA,EAAW,GAAA,GAAM,MAAK,KAAM;AACtF,EAAA,MAAM,WAAA,GAAc,mBAAA;AAEpB,EAAA,uBACE/B,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,UAAA,EAAW,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAagC,WAAAA,CAAW,GAAG,CAAA,EAAG,SAAS,GACpF,QAAA,EACH,CAAA;AAEJ;AChBO,IAAM,iBAAA,GAAsD,CAAC,EAAE,QAAA,EAAU,WAAU,KAAM;AAC9F,EAAA,MAAM,WAAA,GAAc,kHAAA;AAEpB,EAAA,uBACE/B,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,oBAAA,EAAqB,WAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAC7E,QAAA,EACH,CAAA;AAEJ;ACJO,IAAM,aAAA,GAA8C,CAAC,EAAE,KAAA,EAAO,QAAQ,SAAA,EAAW,aAAA,GAAgB,QAAO,KAAM;AACnH,EAAA,MAAM,WAAA,GAAc,kRAAA;AAEpB,EAAA,uBACEG,gBAAC,KAAA,EAAA,EAAI,cAAA,EAAa,kBAAiB,SAAA,EAAWH,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAC1E,QAAA,EAAA;AAAA,oBAAAC,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,cAAA,EAAa,4BAAA;AAAA,QACb,OAAA,EAAS,MAAA;AAAA,QACT,SAAA,EAAU,iOAAA;AAAA,QACV,YAAA,EAAY,aAAA;AAAA,QAEZ,QAAA,kBAAAA,cAAAA,CAACgC,iBAAA,EAAA,EAAc,SAAA,EAAU,gEAAA,EAAiE;AAAA;AAAA,KAC5F;AAAA,oBACAhC,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAQ,SAAA,EAAW,QAAA,EAAA,KAAA,EAAM,CAAA,EACxC;AAAA,GAAA,EACF,CAAA;AAEJ;ACtBO,IAAM,aAAA,GAA8C,CAAC,EAAE,SAAA,EAAW,OAAM,KAAM;AACnF,EAAA,MAAM,WAAA,GAAc,+EAAA;AAEpB,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,iBAAA,EAAkB,WAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAC3E,QAAA,kBAAAC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,WAAA,EAAU,QAAA;AAAA,MACV,SAAA,EAAU,wZAAA;AAAA,MAEV,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kRAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA,EACF;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AClBO,IAAM,eAAA,GAAkD,CAAC,EAAE,SAAA,EAAW,OAAM,KAAM;AACvF,EAAA,MAAM,WAAA,GAAc,+EAAA;AAEpB,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,mBAAA,EAAoB,WAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAC7E,QAAA,kBAAAC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,WAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAU,4ZAAA;AAAA,MAEV,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oRAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA,EACF;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;AClBO,IAAM,YAAA,GAA4C,CAAC,EAAE,SAAA,EAAW,OAAM,KAAM;AACjF,EAAA,MAAM,WAAA,GAAc,+EAAA;AAEpB,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,gBAAA,EAAiB,WAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAC1E,QAAA,kBAAAC,cAAAA;AAAA,IAAC,KAAA;AAAA,IAAA;AAAA,MACC,WAAA,EAAU,OAAA;AAAA,MACV,WAAA,EAAU,WAAA;AAAA,MACV,SAAA,EAAU,4ZAAA;AAAA,MAEV,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2EAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oRAAA,EACZ,QAAA,EAAA,KAAA,EACH,CAAA,EACF;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;ACfA,IAAM+B,WAAAA,GAAa;AAAA,EACjB,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI,yCAAA;AAAA,EACJ,EAAA,EAAI;AACN,CAAA;AAEO,IAAM,cAAA,GAA6C,CAAC,EAAE,QAAA,EAAU,WAAW,GAAA,GAAM,IAAA,uBACtF/B,cAAAA,CAAC,SAAI,cAAA,EAAa,kBAAA,EAAmB,WAAWD,qBAAAA,CAAQ,eAAA,EAAiBgC,YAAW,GAAG,CAAA,EAAG,SAAS,CAAA,EAChG,QAAA,EACH,CAAA;AAsBK,IAAM,oBAAA,GAAgE,CAAC,EAAE,QAAA,EAAS,qBACvF/B,cAAAA,CAAC,GAAA,EAAA,EAAE,cAAA,EAAa,wBAAA,EAAyB,SAAA,EAAU,4JAAA,EAChD,QAAA,EACH,CAAA;AASK,IAAM,MAAA,GAAkD,CAAC,EAAE,QAAA,EAAS,qBACzEA,cAAAA,CAAC,GAAA,EAAA,EAAE,cAAA,EAAa,QAAA,EAAS,SAAA,EAAU,mNAAA,EAChC,QAAA,EACH,CAAA;AAGK,IAAM,WAAA,GAAuD,CAAC,EAAE,QAAA,EAAS,qBAC9EE,eAAAA,CAAC,GAAA,EAAA,EAAE,cAAA,EAAa,eAAA,EAAgB,SAAA,EAAU,4JAAA,EAA6J,QAAA,EAAA;AAAA,EAAA,IAAA;AAAA,EAClM;AAAA,CAAA,EACL,CAAA;AAeK,IAAM+B,aAAsC,CAAC,EAAE,GAAA,EAAK,GAAA,uBACzDjC,cAAAA;AAAA,EAAC,KAAA;AAAA,EAAA;AAAA,IACC,cAAA,EAAa,YAAA;AAAA,IACb,GAAA;AAAA,IACA,GAAA;AAAA,IACA,SAAA,EAAU,0DAAA;AAAA,IACV,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,MAAA,MAAM,YAAA,GAAe,oBAAoB,GAAA,IAAO,KAAA,EAAO,MAAM,CAAA,EAAG,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA;AAChF,MAAC,CAAA,CAAE,MAAA,CAA4B,GAAA,GAAM,CAAA,gCAAA,EAAmC,YAAY,CAAA,CAAA;AAAA,IACtF;AAAA;AACF,CAAA;AAIK,IAAM,YAAA,GAAwD,CAAC,EAAE,QAAA,EAAS,qBAC/EE,eAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,eAAA,EAAgB,SAAA,EAAU,4RAAA,EAC1C,QAAA,EAAA;AAAA,kBAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,yGAAA,EAA0G,CAAA;AAAA,kBAC1HA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,4JACb,QAAA,EACH;AAAA,CAAA,EACF,CAAA;AAIF,IAAM,YAAA,GAAe,CAAC,IAAA,EAAc,KAAA,GAAgB,CAAA,KAAc;AAChE,EAAA,IAAI,IAAA,CAAK,MAAA,IAAU,KAAA,GAAQ,CAAA,GAAI,GAAG,OAAO,IAAA;AACzC,EAAA,OAAO,CAAA,EAAG,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,KAAA,GAAQ,CAAC,CAAC,CAAA,GAAA,EAAM,IAAA,CAAK,KAAA,CAAM,CAAC,KAAK,CAAC,CAAA,CAAA;AAC5D,CAAA;AAMO,IAAM,aAAA,GAA8C,CAAC,EAAE,IAAA,EAAK,KAAM;AACvE,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,uBAAOA,cAAAA,CAAC,MAAA,EAAA,EAAK,gBAAa,gBAAA,EAAiB,SAAA,EAAU,4JAA2J,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,EACnN;AAEA,EAAA,uBACEE,eAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,gBAAA,EAAiB,WAAU,2DAAA,EAC3C,QAAA,EAAA;AAAA,oBAAAF,eAAC,MAAA,EAAA,EAAK,SAAA,EAAU,0JAAA,EACb,QAAA,EAAA,YAAA,CAAa,IAAI,CAAA,EACpB,CAAA;AAAA,oBACAA,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QACC,OAAA,EAAS,IAAA;AAAA,QACT,SAAA,EAAU,oKAAA;AAAA,QACV,aAAA,EAAc;AAAA;AAAA;AAChB,GAAA,EACF,CAAA;AAEJ,CAAA;AAQO,IAAM,eAA4C,CAAC,EAAE,IAAA,EAAM,QAAA,uBAChEA,cAAAA;AAAA,EAAC,GAAA;AAAA,EAAA;AAAA,IACC,cAAA,EAAa,eAAA;AAAA,IACb,IAAA;AAAA,IACA,MAAA,EAAO,QAAA;AAAA,IACP,GAAA,EAAI,qBAAA;AAAA,IACJ,SAAA,EAAU,uQAAA;AAAA,IAET;AAAA;AACH,CAAA;AASK,IAAM,YAAA,GAA4C,CAAC,EAAE,OAAA,EAAS,SAAA,uBACnEE,eAAAA,CAAC,cAAA,EAAA,EAAe,SAAA,EAAU,WAAA,EACxB,QAAA,EAAA;AAAA,kBAAAF,eAAC,GAAA,EAAA,EAAE,cAAA,EAAa,wBAAA,EAAyB,SAAA,EAAU,uNAChD,QAAA,EAAA,OAAA,EACH,CAAA;AAAA,kBACAA,cAAAA,CAAC,GAAA,EAAA,EAAE,gBAAa,0BAAA,EAA2B,SAAA,EAAU,8JAClD,QAAA,EAAA,SAAA,EACH;AAAA,CAAA,EACF,CAAA;AC1HK,IAAM,4BAA+D,CAAC;AAAA,EAC3E,oBAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEE,gBAAC,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAF,eAAC,aAAA,EAAA,EAAc,KAAA,EAAO,MAAA,CAAO,uBAAA,EAAyB,QAAQ,OAAA,EAAS,CAAA;AAAA,oBAEvEA,cAAAA,CAAC,iBAAA,EAAA,EACC,0BAAAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAI,IAAA,EAEX,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAAC,eAAY,SAAA,EAAU,WAAA,EACrB,0BAAAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAI,IAAA,EACX,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,wBAAsB,QAAA,EAAA,oBAAA,EAAqB,CAAA;AAAA,QAE3C,kBAAkB,OAAA,IAAW,QAAA,mBAE1BE,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAI,IAAA,EACX,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAI,IAAA,EACX,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAACiC,YAAA,EAAU,GAAA,EAAK,QAAQ,OAAA,EAAS,GAAA,EAAK,QAAQ,MAAA,EAAQ,CAAA;AAAA,4BACtD/B,gBAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,gBAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,gBAAA,OAAA,CAAQ,MAAA;AAAA,gBAAO,GAAA;AAAA,gBAAE,OAAA,CAAQ;AAAA,eAAA,EAC5B,CAAA;AAAA,cACC,QAAQ,WAAA,mBAELF,eAAC,WAAA,EAAA,EAAa,QAAA,EAAA,OAAA,CAAQ,aAAY,CAAA,GAElC;AAAA,aAAA,EACN;AAAA,WAAA,EACF,CAAA;AAAA,0BACAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAI,IAAA,EACX,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAACiC,YAAA,EAAU,GAAA,EAAK,SAAS,OAAA,EAAS,GAAA,EAAK,SAAS,MAAA,EAAQ,CAAA;AAAA,4BACxD/B,gBAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,gBAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,gBAAA,QAAA,CAAS,MAAA;AAAA,gBAAO,GAAA;AAAA,gBAAE,QAAA,CAAS;AAAA,eAAA,EAC9B,CAAA;AAAA,cACC,SAAS,WAAA,mBAENF,eAAC,WAAA,EAAA,EAAa,QAAA,EAAA,QAAA,CAAS,aAAY,CAAA,GAEnC;AAAA,aAAA,EACN;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,mBAGAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAI,IAAA,EACX,QAAA,EAAA;AAAA,0BAAAF,eAACiC,UAAAA,EAAA,EAAU,GAAA,EAAK,mBAAA,EAAqB,KAAK,MAAA,EAAQ,CAAA;AAAA,0BAClDjC,cAAAA,CAAC,OAAA,EAAA,EACC,0BAAAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAI,IAAA,EACX,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,UAAQ,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,YACzB,yBAAyB,GAAA,mBAEtBA,cAAAA,CAAC,WAAA,EAAA,EAAa,gCAAqB,CAAA,GAEnC;AAAA,WAAA,EACN,CAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EAEN,CAAA,EACF,CAAA;AAAA,sBAGAA,eAAC,WAAA,EAAA,EAAY,SAAA,EAAU,8FACrB,QAAA,kBAAAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAI,IAAA,EACX,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,aAAA,EAAc,CAAA;AAAA,0BACjCA,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,EAAO;AAAA,SAAA,EACrB,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,gBAAA,EAAiB,CAAA;AAAA,0BACpCA,cAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,oBAAA,EAAsB,WAAW,gBAAA,EAAkB;AAAA,SAAA,EAC5E,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,kBAAA,EAAmB,CAAA;AAAA,0BACtCA,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,2BAAA,EAA4B;AAAA,SAAA,EACjD,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,aAAA,EAAc,CAAA;AAAA,0BACjCA,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,aAAA,EAAc;AAAA,SAAA,EAC5B,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,WAAA,EAAY,CAAA;AAAA,0BAC/BA,cAAAA,CAAC,YAAA,EAAA,EAAc,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAC7B,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,kBAAA,EAAmB,CAAA;AAAA,0BACtCA,cAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,MAAA,EAAQ;AAAA,SAAA,EAC/B,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,SAAA,EAAU,CAAA;AAAA,0BAC7BA,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EACnB,CAAA;AAAA,QAEC,WAAA,oBACCE,eAAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,gBAAA,EAAiB,CAAA;AAAA,0BACpCA,cAAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,WAAA,EAAc,iBAAO,mBAAA,EAAoB;AAAA,SAAA,EAC/D;AAAA,OAAA,EAEJ,CAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACrJO,IAAM,6BAAgE,CAAC;AAAA,EAC5E,oBAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,oBAAA;AAAA,EACA,cAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,mBAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,MAAA;AAAA,EACA,IAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEE,gBAAC,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAF,eAAC,aAAA,EAAA,EAAc,KAAA,EAAO,MAAA,CAAO,uBAAA,EAAyB,QAAQ,OAAA,EAAS,CAAA;AAAA,oBAEvEA,cAAAA,CAAC,iBAAA,EAAA,EACC,0BAAAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAI,IAAA,EACX,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAAC,eAAY,SAAA,EAAU,WAAA,EACrB,0BAAAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAI,IAAA,EACX,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,wBAAsB,QAAA,EAAA,oBAAA,EAAqB,CAAA;AAAA,QAE3C,kBAAkB,OAAA,IAAW,QAAA,mBAE1BE,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAI,IAAA,EACX,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAI,IAAA,EACX,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAACiC,YAAA,EAAU,GAAA,EAAK,QAAQ,OAAA,EAAS,GAAA,EAAK,QAAQ,MAAA,EAAQ,CAAA;AAAA,4BACtD/B,gBAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,gBAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,gBAAA,OAAA,CAAQ,MAAA;AAAA,gBAAO,GAAA;AAAA,gBAAE,OAAA,CAAQ;AAAA,eAAA,EAC5B,CAAA;AAAA,cACC,QAAQ,WAAA,mBAELF,eAAC,WAAA,EAAA,EAAa,QAAA,EAAA,OAAA,CAAQ,aAAY,CAAA,GAElC;AAAA,aAAA,EACN;AAAA,WAAA,EACF,CAAA;AAAA,0BACAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAI,IAAA,EACX,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAACiC,YAAA,EAAU,GAAA,EAAK,SAAS,OAAA,EAAS,GAAA,EAAK,SAAS,MAAA,EAAQ,CAAA;AAAA,4BACxD/B,gBAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,8BAAAA,gBAAC,MAAA,EAAA,EACE,QAAA,EAAA;AAAA,gBAAA,QAAA,CAAS,MAAA;AAAA,gBAAO,GAAA;AAAA,gBAAE,QAAA,CAAS;AAAA,eAAA,EAC9B,CAAA;AAAA,cACC,SAAS,WAAA,mBAENF,eAAC,WAAA,EAAA,EAAa,QAAA,EAAA,QAAA,CAAS,aAAY,CAAA,GAEnC;AAAA,aAAA,EACN;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,mBAGAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAI,IAAA,EACX,QAAA,EAAA;AAAA,0BAAAF,eAACiC,UAAAA,EAAA,EAAU,GAAA,EAAK,mBAAA,EAAqB,KAAK,MAAA,EAAQ,CAAA;AAAA,0BAClDjC,cAAAA,CAAC,OAAA,EAAA,EACC,0BAAAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,KAAI,IAAA,EACX,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,UAAQ,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,YACzB,yBAAyB,GAAA,mBAEtBA,cAAAA,CAAC,WAAA,EAAA,EAAa,gCAAqB,CAAA,GAEnC;AAAA,WAAA,EACN,CAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EAEN,CAAA,EACF,CAAA;AAAA,sBAEAA,eAAC,WAAA,EAAA,EAAY,SAAA,EAAU,8FACrB,QAAA,kBAAAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,GAAA,EAAI,IAAA,EACX,QAAA,EAAA;AAAA,wBAAAA,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,aAAA,EAAc,CAAA;AAAA,0BACjCA,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,EAAO;AAAA,SAAA,EACrB,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,gBAAA,EAAiB,CAAA;AAAA,0BACpCA,cAAAA,CAAC,YAAA,EAAA,EAAa,OAAA,EAAS,oBAAA,EAAsB,WAAW,gBAAA,EAAkB;AAAA,SAAA,EAC5E,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,kBAAA,EAAmB,CAAA;AAAA,0BACtCA,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,2BAAA,EAA4B;AAAA,SAAA,EACjD,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,aAAA,EAAc,CAAA;AAAA,0BACjCA,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,aAAA,EAAc;AAAA,SAAA,EAC5B,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,WAAA,EAAY,CAAA;AAAA,0BAC/BA,cAAAA,CAAC,YAAA,EAAA,EAAc,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EAC7B,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,kBAAA,EAAmB,CAAA;AAAA,0BACtCA,cAAAA,CAAC,aAAA,EAAA,EAAc,IAAA,EAAM,MAAA,EAAQ;AAAA,SAAA,EAC/B,CAAA;AAAA,wBAEAE,eAAAA,CAAC,OAAA,EAAA,EAAQ,YAAA,EAAY,IAAA,EACnB,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,SAAA,EAAU,CAAA;AAAA,0BAC7BA,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,IAAA,EAAK;AAAA,SAAA,EACnB,CAAA;AAAA,QAEC,WAAA,oBACCE,eAAAA,CAAC,OAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,SAAA,EAAA,EAAW,QAAA,EAAA,MAAA,CAAO,gBAAA,EAAiB,CAAA;AAAA,0BACpCA,cAAAA,CAAC,YAAA,EAAA,EAAa,IAAA,EAAM,WAAA,EAAc,iBAAO,mBAAA,EAAoB;AAAA,SAAA,EAC/D;AAAA,OAAA,EAEJ,CAAA,EACF;AAAA,KAAA,EACF,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;AClIO,IAAM,0BAAkE,CAAC;AAAA,EAC9E,UAAA;AAAA,EACA,UAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA,GAAiB,IAAA;AAAA,EACjB,MAAA,GAAS,uBAAA;AAAA,EACT;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,WAAA,GAAc,oEAAA;AAEpB,EAAA,uBACEE,gBAAC,KAAA,EAAA,EAAI,cAAA,EAAc,QAAQ,SAAA,EAAWH,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAClE,QAAA,EAAA;AAAA,oBAAAC,cAAAA,CAAC,YAAS,EAAA,EAAG,MAAA,EAAO,SAAQ,oGAAA,EAAqG,SAAA,EAAU,wEACxI,QAAA,EAAA,cAAA,EACH,CAAA;AAAA,oBACAE,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAa,MAAA;AAAA,QACb,IAAA,EAAK,QAAA;AAAA,QACL,OAAA;AAAA,QACA,SAAA,EAAU,wlBAAA;AAAA,QACV,YAAA,EAAY,CAAA,EAAG,cAAc,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,QAE1C,QAAA,EAAA;AAAA,UAAA,UAAA,mBAEGF,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,YAAY,GAAA,EAAK,UAAA,EAAY,SAAA,EAAU,0DAAA,EAA2D,CAAA,GAE5G,IAAA;AAAA,0BACJA,cAAAA,CAAC,MAAA,EAAA,EAAM,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,0BAClBA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC8B,iBAAAA,EAAA,EAAc,SAAA,EAAU,gEAAA,EAAiE,CAAA,EAC5F;AAAA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;ACtCO,IAAM,sBAA0D,CAAC;AAAA,EACtE,KAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,WAAA,GAAc,mHAAA;AAEpB,EAAA,uBACE9B,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,qBAAoB,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAC7E,QAAA,kBAAAG,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,mCAAA,EACb,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,YAAS,EAAA,EAAG,MAAA,EAAO,SAAQ,oGAAA,EAAqG,SAAA,EAAU,6IACxI,QAAA,EAAA,KAAA,EACH,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DACZ,QAAA,EAAA,YAAA,EACH;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACVO,IAAM,sBAA0D,CAAC;AAAA,EACtE,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,iBAAA,GAAoB,CAAA;AAAA,EACpB,KAAA;AAAA,EACA,SAAA,GAAY,gBAAA;AAAA,EACZ;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,oBAAA,GAAuB,CAAC,GAAA,KAAgB;AAC5C,IAAA,IAAI,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,UAAA,EAAY,EAAE,CAAA;AACpC,IAAA,MAAM,iBAAA,GAAoB,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAC1C,IAAA,GAAA,GAAM,GAAA,CAAI,OAAA,CAAQ,IAAA,EAAM,GAAG,CAAA;AAC3B,IAAA,MAAM,QAAA,GAAW,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AAChC,IAAA,IAAI,aAAa,EAAA,EAAI;AACnB,MAAA,MAAM,OAAA,GAAU,GAAA,CAAI,KAAA,CAAM,CAAA,EAAG,QAAQ,CAAA;AACrC,MAAA,MAAM,UAAA,GAAa,GAAA,CAChB,KAAA,CAAM,QAAA,GAAW,CAAC,CAAA,CAClB,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,CACjB,KAAA,CAAM,CAAA,EAAG,iBAAiB,CAAA;AAC7B,MAAA,IAAI,UAAA,CAAW,SAAS,CAAA,EAAG;AACzB,QAAA,GAAA,GAAM,CAAA,EAAG,OAAO,CAAA,CAAA,EAAI,UAAU,CAAA,CAAA;AAAA,MAChC,CAAA,MAAO;AACL,QAAA,GAAA,GAAM,iBAAA,GAAoB,CAAA,EAAG,OAAO,CAAA,CAAA,CAAA,GAAM,OAAA;AAAA,MAC5C;AAAA,IACF;AACA,IAAA,IAAI,GAAA,CAAI,UAAA,CAAW,GAAG,CAAA,EAAG;AACvB,MAAA,GAAA,GAAM,IAAI,GAAG,CAAA,CAAA;AAAA,IACf;AACA,IAAA,OAAO,GAAA;AAAA,EACT,CAAA;AAEA,EAAA,MAAM,WAAA,GAAc,uSAAA;AACpB,EAAA,MAAM,YAAA,GAAe,WACjB,sDAAA,GACA,uDAAA;AAEJ,EAAA,uBACEA,cAAAA;AAAA,IAAC,OAAA;AAAA,IAAA,aAAA,CAAA,cAAA,CAAA;AAAA,MACC,cAAA,EAAa,wBAAA;AAAA,MACb,WAAA,EAAY,MAAA;AAAA,MACZ,IAAA,EAAK,MAAA;AAAA,MACL,SAAA,EAAU,SAAA;AAAA,MACV,YAAA,EAAa,KAAA;AAAA,MACb,YAAA,EAAY,SAAA;AAAA,MACZ,GAAA,EAAI,GAAA;AAAA,MACJ,IAAA,EAAK,KAAA;AAAA,MACL,KAAA;AAAA,MACA,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,YAAA,EAAc,SAAS;AAAA,KAAA,EACnD,KAAA,CAAA,EAXL;AAAA,MAYC,QAAA,EAAU,CAAC,KAAA,KAAU;AACnB,QAAA,IAAI,UAAA,GAAa,oBAAA,CAAqB,KAAA,CAAM,MAAA,CAAO,KAAK,CAAA;AACxD,QAAA,IAAI,UAAA,IAAc,UAAA,CAAW,UAAU,CAAA,GAAI,CAAA,EAAG;AAC5C,UAAA,UAAA,GAAa,GAAA;AAAA,QACf;AACA,QAAA,QAAA,CAAS,UAAU,CAAA;AAAA,MACrB,CAAA;AAAA,MACA,OAAA,EAAS,CAAC,KAAA,KAA8C;AACtD,QAAA,KAAA,CAAM,cAAc,IAAA,EAAK;AAAA,MAC3B;AAAA,KAAA;AAAA,GACF;AAEJ;ACrEO,IAAM,uBAA4D,CAAC;AAAA,EACxE,aAAA;AAAA,EACA,SAAA;AAAA,EACA,cAAA;AAAA,EACA,mBAAA,GAAsB,oBAAA;AAAA,EACtB;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,WAAA,GAAc,sPAAA;AAEpB,EAAA,uBACEC,eAAC,KAAA,EAAA,EAAI,cAAA,EAAa,2BAA0B,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAClF,QAAA,EAAA,SAAA,mBAEGC,cAAAA,CAAC,QAAA,EAAA,EAAS,EAAA,EAAG,MAAA,EAAO,OAAA,EAAQ,oGAAA,EAAqG,WAAU,yFAAA,EACxI,QAAA,EAAA,cAAA,IAAA,IAAA,GAAA,cAAA,GAAkB,mBAAA,EACrB,CAAA,GAGE,aAAA,EAER,CAAA;AAEJ;ACxBO,IAAM,sBAA0D,CAAC;AAAA,EACtE,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA,GAAoB,0CAAA;AAAA,EACpB,oBAAA,GAAuB;AACzB,CAAA,KAAM;AACJ,EAAA,uBACEE,eAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,mBAAA,EACf,QAAA,EAAA;AAAA,IAAA,aAAA,oBACCF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SACb,QAAA,kBAAAA,cAAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAS;AAAA;AAAA,KACX,EACF,CAAA;AAAA,IAED,oCACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SACb,QAAA,kBAAAA,cAAAA;AAAA,MAAC,kBAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAQ,OAAA;AAAA,QACR,OAAA,EAAS;AAAA;AAAA,KACX,EACF;AAAA,GAAA,EAEJ,CAAA;AAEJ;ACnCA,IAAM,gBAAA,GAAmB,CAAC,EAAA,EAAI,EAAA,EAAI,GAAG,CAAA;AAS9B,IAAM,mCAAoF,CAAC;AAAA,EAChG,WAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,WAAA,GAAc,8CAAA;AAEpB,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,iCAAA,EAAkC,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA,EAC1F,QAAA,EAAA,gBAAA,CAAiB,GAAA,CAAI,CAAC,MAAA,KAAW;AAChC,IAAA,MAAM,WAAW,WAAA,KAAgB,MAAA;AACjC,IAAA,MAAM,aAAA,GAAgB,yMAAA;AACtB,IAAA,MAAM,eAAA,GAAkB,gKAAA;AACxB,IAAA,MAAM,UAAA,GAAa,mQAAA;AAEnB,IAAA,uBACEC,cAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QAEC,cAAA,EAAc,mBAAmB,MAAM,CAAA,CAAA;AAAA,QACvC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,MAAM,QAAA,CAAS,MAAM,CAAA;AAAA,QAC9B,SAAA,EAAWD,qBAAAA,CAAQ,UAAA,EAAY,QAAA,GAAW,gBAAgB,eAAe,CAAA;AAAA,QACzE,YAAA,EAAY,CAAA,EAAG,gBAAA,CAAiB,MAAM,CAAC,CAAA,UAAA,CAAA;AAAA,QACvC,cAAA,EAAc,QAAA;AAAA,QAEb,2BAAiB,MAAM;AAAA,OAAA;AAAA,MARnB;AAAA,KASP;AAAA,EAEJ,CAAC,CAAA,EACH,CAAA;AAEJ;AC/BO,IAAM,wBAA8D,CAAC;AAAA,EAC1E,KAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA,GAAS,qBAAA;AAAA,EACT,gBAAA,GAAmB,cAAA;AAAA,EACnB;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,WAAA,GAAc,4TAAA;AAEpB,EAAA,uBACEG,eAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,cAAA,EAAc,MAAA;AAAA,MACd,IAAA,EAAK,QAAA;AAAA,MACL,OAAA;AAAA,MACA,SAAA,EAAWH,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA;AAAA,MACzC,YAAA,EAAY,KAAA,GAAQ,KAAA,CAAM,MAAA,GAAS,gBAAA;AAAA,MAEnC,QAAA,EAAA;AAAA,wBAAAC,cAAAA,CAAC,SAAI,SAAA,EAAU,kEAAA,EACZ,kCAEGE,eAAAA,CAAAyB,qBAAA,EACG,QAAA,EAAA;AAAA,UAAA,KAAA,CAAM,OAAA,mBAEH3B,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,KAAA,CAAM,OAAA,EAAS,GAAA,EAAK,KAAA,CAAM,MAAA,EAAQ,SAAA,EAAU,0DAAA,EAA2D,CAAA,mBAGjHA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sQAAA,EACX,QAAA,EAAA,CAAA,KAAA,CAAM,MAAA,IAAU,EAAA,EAAI,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA,CAAE,WAAA,EAAY,EAChD,CAAA;AAAA,0BAEJA,eAAC,QAAA,EAAA,EAAS,EAAA,EAAG,QAAO,SAAA,EAAU,uDAAA,EAC3B,gBAAM,MAAA,EACT;AAAA,SAAA,EACF,CAAA,mBAGAA,cAAAA,CAAC,QAAA,EAAA,EAAS,IAAG,MAAA,EAAO,SAAA,EAAU,yDAAA,EAC3B,QAAA,EAAA,gBAAA,EACH,CAAA,EAEN,CAAA;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oDAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC8B,iBAAAA,EAAA,EAAc,SAAA,EAAU,gEAAA,EAAiE,CAAA,EAC5F;AAAA;AAAA;AAAA,GACF;AAEJ;ACzCO,IAAM,+BAA4E,CAAC;AAAA,EACxF,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,oBAAA,GAAuB,kBAAA;AAAA,EACvB,eAAA,GAAkB,aAAA;AAAA,EAClB,gBAAA,GAAmB,cAAA;AAAA,EACnB,aAAA,GAAgB,UAAA;AAAA,EAChB,WAAA,GAAc;AAChB,CAAA,KAAM;AACJ,EAAA,uBACE9B,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,+BAChB,QAAA,kBAAAA,cAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA,EAAO,oBAAA;AAAA,MACP,KAAA,EAAO,CAAA,EAAG,kBAAkB,CAAA,GAAA,EAAM,aAAa,CAAA,CAAA,CAAA;AAAA,MAC/C,WAAA,EAAW,IAAA;AAAA,MACX,aAAA;AAAA,MACA,WAAA;AAAA,MAEA,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uDAAA,EACb,QAAA,EAAA;AAAA,wBAAAA,gBAAC,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,oBAAkB,QAAA,EAAA,eAAA,EAAgB,CAAA;AAAA,0BACnCA,cAAAA,CAAC,gBAAA,EAAA,EAAkB,QAAA,EAAA,gBAAA,EAAiB;AAAA,SAAA,EACtC,CAAA;AAAA,wBACAE,eAAAA,CAAC,eAAA,EAAA,EAAgB,YAAA,EAAY,IAAA,EAC3B,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,oBAAkB,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,0BACpCA,cAAAA,CAAC,gBAAA,EAAA,EAAkB,QAAA,EAAA,WAAA,EAAY;AAAA,SAAA,EACjC;AAAA,OAAA,EACF;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;ACxCO,IAAMkC,YAAAA,GAA0C,CAAC,EAAE,OAAA,EAAS,QAAQ,SAAA,GAAY,OAAA,EAAS,WAAU,KAAM;AAC9G,EAAA,MAAM,WAAA,GAAc,mPAAA;AAEpB,EAAA,uBACElC,cAAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,gBAAc,MAAA,IAAA,IAAA,GAAA,MAAA,GAAU,cAAA;AAAA,MACxB,OAAA;AAAA,MACA,SAAA,EAAWD,qBAAAA,CAAQ,WAAA,EAAa,SAAS,CAAA;AAAA,MACzC,YAAA,EAAY,SAAA;AAAA,MAEZ,QAAA,kBAAAC,cAAAA,CAACmC,WAAA,EAAA,EAAQ,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA,GAC/B;AAEJ,CAAA;ACGO,IAAM,iCAAgF,CAAC;AAAA,EAC5F,MAAA;AAAA,EACA,oBAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,QAAA,GAAW,KAAA;AAAA,EACX,eAAA;AAAA,EACA,cAAA,GAAiB;AACnB,CAAA,KAAM;AACJ,EAAA,MAAM,kBAAA,GAAqB,UAAA,IAAA,IAAA,GAAA,UAAA,GAAc,CAAA,MAAA,EAAS,SAAS,CAAA,CAAA;AAE3D,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,qBAAKnC,cAAAA,CAAC,YAAA,EAAA,EAAa,KAAA,EAAO,gBAAgB,GAAA,EAAK,CAAA;AAAA,IAC/C,wBAAQA,cAAAA,CAAC,eAAA,EAAA,EAAgB,KAAA,EAAO,gBAAgB,MAAA,EAAQ,CAAA;AAAA,IACxD,sBAAMA,cAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,gBAAgB,IAAA,EAAM;AAAA,GACpD;AAEA,EAAA,MAAM,KAAA,GAAQ,OAAO,SAAS,CAAA;AAE9B,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,gBAAa,6BAAA,EAA8B,SAAA,EAAU,uBACxD,QAAA,kBAAAA,cAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAG,iBAAA;AAAA,MACH,oBAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAS,QAAA;AAAA,MACT,MAAA,EAAO,MAAA;AAAA,MACP,gBAAA,EAAiB,8BAAA;AAAA,MAEjB,QAAA,kBAAAE,eAAAA,CAAC,mBAAA,EAAA,EAAoB,SAAA,EAAU,sBAAA,EAC7B,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAACkC,YAAAA,EAAA,EAAY,OAAA,EAAS,OAAA,EAAS,SAAA,EAAW,cAAA,EAAgB,CAAA,EAC5D,CAAA;AAAA,wBACAhC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uIAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,eAAa,QAAA,EAAA,kBAAA,EAAmB,CAAA;AAAA,4BACjCA,eAAC,IAAA,EAAA,EAAG;AAAA,WAAA,EACN,CAAA;AAAA,0BACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oIAAA,EACb,QAAA,kBAAAE,eAAAA,CAAC,QAAA,EAAA,EAAS,SAAA,EAAU,eAAA,EAAgB,OAAA,EAAS,eAAA,EAC3C,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,gBAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,GAAA,EAAK,SAAA,EAAW,SAAA,EAAU,4DAAA,EAA6D,CAAA,EAC5G,CAAA;AAAA,4BACAE,eAAAA,CAAC,eAAA,EAAA,EAAgB,SAAA,EAAU,yCAAA,EACzB,QAAA,EAAA;AAAA,8BAAAF,cAAAA,CAAC,YAAU,QAAA,EAAA,kBAAA,EAAmB,CAAA;AAAA,8BAC9BA,cAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,sGAAsG,QAAA,EAAA,KAAA,EAAM;AAAA,aAAA,EAChI,CAAA;AAAA,4BACAA,cAAAA,CAAC,iBAAA,EAAA,EACC,0BAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,0EAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,wDAAA,EAA0D,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBAAI,IAAA;AAAA,gBAAG;AAAA,eAAA,EAAS,CAAA;AAAA,8BAC1FF,cAAAA,CAACoC,gBAAA,EAAA,EAAa,SAAA,EAAU,SAAA,EAAU;AAAA,aAAA,EACpC,CAAA,EACF;AAAA,WAAA,EACF,CAAA,EACF;AAAA,SAAA,EACF;AAAA,OAAA,EACF;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;ACzEO,IAAM,sBAA0D,CAAC;AAAA,EACtE,OAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA,GAAc,SAAA;AAAA,EACd,iBAAA,GAAoB,eAAA;AAAA,EACpB,kBAAA,GAAqB,SAAA;AAAA,EACrB,aAAA,GAAgB;AAClB,CAAA,KAAM;AACJ,EAAA,uBACElC,gBAAC,mBAAA,EAAA,EACC,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,WAAA,EAAa,QAAgB,aAAA,EAA8B,CAAA;AAAA,oBAEjFA,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,0BAAA,EAA2B,SAAA,EAAU,qNAAA,EACrD,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kEAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EACb,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,SAAI,cAAA,EAAa,eAAA,EAAgB,KAAK,OAAA,EAAS,GAAA,EAAK,KAAA,EAAO,SAAA,EAAU,4DAAA,EAA6D,CAAA;AAAA,wBACnIA,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAQ,MAAM,QAAA,EAAA,KAAA,EAAM;AAAA,OAAA,EACnC,CAAA;AAAA,sBAEAA,cAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,sGAAsG,QAAA,EAAA,WAAA,EAAY,CAAA;AAAA,sBAEpIA,cAAAA;AAAA,QAAC,cAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,iBAAA;AAAA,UACP,KAAA,EAAO,YAAA;AAAA,UACP,WAAA,EAAW,IAAA;AAAA,UACX,SAAA,EAAU;AAAA;AAAA;AACZ,KAAA,EACF,CAAA,EACF,CAAA;AAAA,oBAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,cAAA,EAAa,2BAA0B,SAAA,EAAU,8LAAA,EACpD,QAAA,kBAAAA,cAAAA,CAAC,iBAAc,OAAA,EAAS,SAAA,EAAW,SAAA,EAAU,QAAA,EAC1C,8BACH,CAAA,EACF;AAAA,GAAA,EACF,CAAA;AAEJ;ACpDO,IAAM,oBAAsD,CAAC;AAAA,EAClE,QAAA;AAAA,EACA,SAAA,GAAY;AACd,CAAA,KAAM;AACJ,EAAA,MAAM,eAAA,GAAkB,KAAK,GAAA,CAAI,GAAA,EAAK,KAAK,GAAA,CAAI,CAAA,EAAG,QAAQ,CAAC,CAAA;AAE3D,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,yBAAA,EAA4B,SAAS,CAAA,CAAA,EACnD,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,oBAAAF,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,mIAAA;AAAA,QACV,KAAA,EAAO,EAAE,KAAA,EAAO,CAAA,EAAG,eAAe,CAAA,CAAA,CAAA;AAAI;AAAA,KACxC;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mJAAA,EAAoJ;AAAA,GAAA,EACrK,CAAA,EACF,CAAA;AAEJ;AChBO,IAAM,WAAA,GAA0C,CAAC,EAAE,SAAA,GAAY,IAAG,KAAM;AAC7E,EAAA,uBACEE,eAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,iDAAA,EAAoD,SAAS,CAAA,CAAA,EAC5E,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAiB,KAAA,EAAO,EAAE,cAAA,EAAgB,KAAA,EAAO,iBAAA,EAAmB,MAAA,EAAO,EAAG,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oBAC/FA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAiB,KAAA,EAAO,EAAE,cAAA,EAAgB,OAAA,EAAS,iBAAA,EAAmB,MAAA,EAAO,EAAG,QAAA,EAAA,GAAA,EAAC,CAAA;AAAA,oBACjGA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,gBAAA,EAAiB,KAAA,EAAO,EAAE,cAAA,EAAgB,OAAA,EAAS,iBAAA,EAAmB,MAAA,EAAO,EAAG,QAAA,EAAA,GAAA,EAAC;AAAA,GAAA,EACnG,CAAA;AAEJ;AC+BO,IAAMqC,eAA0C,CAAC;AAAA,EACtD,WAAA,GAAc,QAAA;AAAA,EACd,KAAA,EAAO,eAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,cAAA;AAAA,EACA,SAAA,GAAY,KAAA;AAAA,EACZ,eAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIC,eAAAA,CAAS,mBAAmB,EAAE,CAAA;AAGxE,EAAAC,iBAAU,MAAM;AACd,IAAA,IAAI,oBAAoB,MAAA,EAAW;AACjC,MAAA,gBAAA,CAAiB,eAAe,CAAA;AAAA,IAClC;AAAA,EACF,CAAA,EAAG,CAAC,eAAe,CAAC,CAAA;AAEpB,EAAA,MAAM,iBAAA,GAAoB,CAAC,QAAA,KAAqB;AAC9C,IAAA,gBAAA,CAAiB,QAAQ,CAAA;AACzB,IAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,QAAA,CAAA;AACX,IAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAW,QAAA,CAAA;AAAA,EACb,CAAA;AAEA,EAAA,uBACErC,gBAAC,KAAA,EAAA,EAAI,SAAA,EAAW,qCAAqC,SAAS,CAAA,CAAA,EAAI,eAAa,eAAA,EAC7E,QAAA,EAAA;AAAA,oBAAAF,cAAAA;AAAA,MAAC,OAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAa,WAAA;AAAA,QACb,IAAA,EAAK,MAAA;AAAA,QACL,KAAA,EAAO,aAAA;AAAA,QACP,WAAA;AAAA,QACA,QAAA;AAAA,QACA,SAAA;AAAA,QACA,UAAU,CAAC,CAAA,KAAM,iBAAA,CAAkB,CAAA,CAAE,OAAO,KAAK,CAAA;AAAA,QACjD,SAAA,EAAW;AAAA,UACT,mOAAA;AAAA,UACA,CAAC,iBAAiB,+CAAA,GAAkD,EAAA;AAAA,UACpE,kIAAA;AAAA,UACA,0DAAA;AAAA,UACA,WAAW,+BAAA,GAAkC,EAAA;AAAA,UAC7C,cAAA,IAAkB;AAAA,SACpB,CAAE,MAAA,CAAO,OAAO,CAAA,CAAE,KAAK,GAAG;AAAA;AAAA,KAC5B;AAAA,oBACAA,cAAAA,CAACwC,kBAAA,EAAA,EAAgB,SAAA,EAAU,kFAAA,EAAmF;AAAA,GAAA,EAChH,CAAA;AAEJ;ACzFO,IAAM,mBAAoD,CAAC;AAAA,EAChE,KAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACExC,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2OACb,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wIAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+FAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAAC,SAAI,SAAA,EAAU,0IAAA,EACb,0BAAAA,cAAAA,CAACyC,qBAAA,EAAA,EAAmB,SAAA,EAAU,kEAAA,EAAmE,CAAA,EACnG,CAAA;AAAA,sBACAzC,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAQ,MAAM,QAAA,EAAA,KAAA,EAAM;AAAA,KAAA,EACnC,CAAA;AAAA,oBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0BAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,oGAAA,EAAsG,QAAA,EAAA,WAAA,EAAY,CAAA,EACtI;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACHO,IAAM,qBAAwD,CAAC;AAAA,EACpE,KAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,WAAA,GAAc,KAAA;AAAA,EACd,IAAA,EAAM,cAAA;AAAA,EACN,YAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,YAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIG,yBAAAA,CAAM,SAAS,WAAW,CAAA;AAGlE,EAAA,MAAM,MAAA,GAAS,cAAA,KAAmB,MAAA,GAAY,cAAA,GAAiB,YAAA;AAE/D,EAAA,MAAM,eAAe,MAAM;AACzB,IAAA,MAAM,eAAe,CAAC,MAAA;AACtB,IAAA,IAAI,mBAAmB,MAAA,EAAW;AAChC,MAAA,eAAA,CAAgB,YAAY,CAAA;AAAA,IAC9B;AACA,IAAA,YAAA,IAAA,IAAA,GAAA,MAAA,GAAA,YAAA,CAAe,YAAA,CAAA;AAAA,EACjB,CAAA;AAEA,EAAA,uBACED,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,CAAA,6DAAA,EAAgE,SAAS,CAAA,CAAA,EACvF,QAAA,EAAA;AAAA,oBAAAA,eAAAA;AAAA,MAAC,QAAA;AAAA,MAAA;AAAA,QACC,IAAA,EAAK,QAAA;AAAA,QACL,OAAA,EAAS,YAAA;AAAA,QACT,SAAA,EAAU,mEAAA;AAAA,QACV,eAAA,EAAe,MAAA;AAAA,QACf,cAAY,CAAA,EAAG,MAAA,GAAS,YAAA,GAAe,UAAU,IAAI,KAAK,CAAA,CAAA;AAAA,QAE1D,QAAA,EAAA;AAAA,0BAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EACb,QAAA,kBAAAA,eAAC,QAAA,EAAA,EAAS,SAAA,EAAU,mHAAA,EAAqH,QAAA,EAAA,KAAA,EAAM,CAAA,EACjJ,CAAA;AAAA,0BACAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EACZ,QAAA,EAAA;AAAA,YAAA,QAAA,oBACCF,cAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,sGAAsG,QAAA,EAAA,QAAA,EAAS,CAAA;AAAA,4BAEnIA,cAAAA;AAAA,cAACQ,mBAAAA,CAAO,GAAA;AAAA,cAAP;AAAA,gBACC,SAAA,EAAU,iEAAA;AAAA,gBACV,IAAA,EAAK,MAAA;AAAA,gBACL,MAAA,EAAO,cAAA;AAAA,gBACP,OAAA,EAAQ,WAAA;AAAA,gBACR,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,GAAS,MAAM,CAAA,EAAE;AAAA,gBACpC,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,MAAM,WAAA,EAAY;AAAA,gBAE/C,QAAA,kBAAAR,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EAAQ,WAAA,EAAa,CAAA,EAAG,CAAA,EAAE,cAAA,EAAe;AAAA;AAAA;AACtF,WAAA,EACF;AAAA;AAAA;AAAA,KACF;AAAA,oBACAA,cAAAA,CAACU,4BAAAA,EAAA,EACE,oCACCV,cAAAA;AAAA,MAACQ,mBAAAA,CAAO,GAAA;AAAA,MAAP;AAAA,QACC,OAAA,EAAS,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QACjC,OAAA,EAAS,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAA,EAAE;AAAA,QACtC,IAAA,EAAM,EAAE,MAAA,EAAQ,CAAA,EAAG,SAAS,CAAA,EAAE;AAAA,QAC9B,UAAA,EAAY,EAAE,QAAA,EAAU,GAAA,EAAK,MAAM,WAAA,EAAY;AAAA,QAC/C,KAAA,EAAO,EAAE,QAAA,EAAU,QAAA,EAAS;AAAA,QAE3B;AAAA;AAAA,KACH,EAEJ;AAAA,GAAA,EACF,CAAA;AAEJ;ACrFO,IAAM,wBAA8D,CAAC;AAAA,EAC1E,IAAA;AAAA,EACA,QAAA,GAAW;AACb,CAAA,KAAM;AACJ,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,uBACER,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kJACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sEAAqE,IAAA,EAAK,MAAA,EAAO,OAAA,EAAQ,WAAA,EAAY,MAAA,EAAO,cAAA,EAAe,WAAA,EAAa,CAAA,EACrJ,0BAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAc,OAAA,EAAQ,gBAAe,OAAA,EAAQ,CAAA,EAAE,gBAAA,EAAiB,CAAA,EACxE,GACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,IAAI,SAAS,SAAA,EAAW;AACtB,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,8BACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iGAAA,EAAkG,KAAA,EAAO,EAAE,UAAA,EAAY,UAAS,EAC7I,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6DAAA,EAA8D,IAAA,EAAK,cAAA,EAAe,SAAQ,WAAA,EAAY,KAAA,EAAM,4BAAA,EACzH,QAAA,kBAAAA,eAAC,MAAA,EAAA,EAAK,CAAA,EAAE,soBAAA,EAAuoB,CAAA,EACjpB,GACF,CAAA,EACF,CAAA;AAAA,EAEJ;AAEA,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACb,0BAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iGAAA,EAAkG,OAAO,EAAE,UAAA,EAAY,UAAS,EAC7I,QAAA,kBAAAA,eAAC,KAAA,EAAA,EAAI,KAAA,EAAM,IAAA,EAAK,MAAA,EAAO,MAAK,OAAA,EAAQ,WAAA,EAAY,MAAK,MAAA,EAAO,KAAA,EAAM,8BAA6B,SAAA,EAAU,oEAAA,EACvG,QAAA,kBAAAA,cAAAA,CAAC,UAAK,CAAA,EAAE,8qDAAA,EAA+qD,MAAK,cAAA,EAAe,CAAA,EAC7sD,GACF,CAAA,EACF,CAAA;AAEJ;AChBO,IAAM,oBAAsD,CAAC;AAAA,EAClE,QAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,OAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEA,cAAAA,CAAC,mBAAA,EAAA,EACC,0BAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,sBAAA,EACZ,QAAA,EAAA;AAAA,IAAA,MAAA,oBAAUF,cAAAA,CAAC,aAAA,EAAA,EAAc,KAAA,EAAO,WAAW,MAAA,EAAgB,CAAA;AAAA,IAC3D,OAAA,oBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,eAAa,MAAA,EAAQ,SAAA,EAAU,uEAAA,EAClC,QAAA,kBAAAA,cAAAA,CAACkC,YAAAA,EAAA,EAAY,OAAA,EAAS,SAAS,CAAA,EACjC,CAAA;AAAA,oBAGFlC,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oGACb,QAAA,kBAAAA,cAAAA,CAAC,iBAAA,EAAA,EAAkB,QAAA,EAAoB,CAAA,EACzC,CAAA;AAAA,oBAEAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wKAAA,EACb,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0EAAA,EACb,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,qBAAA,EAAA,EAAsB,IAAA,EAAM,QAAA,EAAU,UAAU,YAAA,EAAc,CAAA;AAAA,wBAC/DA,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAQ,WAAW,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,wBACtCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iNAAA,EAAkN,OAAO,EAAE,QAAA,EAAU,OAAA,EAAQ,EACzP,QAAA,EAAA,WAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,MAEC,QAAA;AAAA,sBAEDA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EAAS;AAAA,KAAA,EAC1B,CAAA;AAAA,IAEC,2BACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6FACZ,QAAA,EAAA,OAAA,EACH;AAAA,GAAA,EAEJ,CAAA,EACF,CAAA;AAEJ;AC/DO,IAAM,kCAAkF,CAAC;AAAA,EAC9F,YAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,aAAA,EAAe,gBAAgB,CAAA,GAAIG,yBAAAA,CAAM,SAAS,KAAK,CAAA;AAE9D,EAAAA,yBAAAA,CAAM,UAAU,MAAM;AACpB,IAAA,gBAAA,CAAiB,KAAK,CAAA;AAAA,EACxB,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,eAAA,GAAkB,OAAA,CAAQ,OAAO,CAAA,IAAK,CAAC,aAAA;AAC7C,EAAA,MAAM,iBAAiB,OAAA,IAAW,GAAA,EAAK,MAAM,CAAA,EAAG,CAAC,EAAE,WAAA,EAAY;AAE/D,EAAA,uBACEH,eAAC,WAAA,EAAA,EAAY,SAAA,EAAU,aACrB,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mEAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4PAAA,EACZ,QAAA,EAAA,YAAA,EACH,CAAA;AAAA,sBACAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EACZ,QAAA,EAAA;AAAA,QAAA,QAAA;AAAA,QAAS,GAAA;AAAA,wBAACF,cAAAA,CAAC,QAAA,EAAA,EAAS,IAAG,MAAA,EAAO,SAAA,EAAU,0DAA0D,QAAA,EAAA,QAAA,EAAS;AAAA,OAAA,EAC9G;AAAA,KAAA,EACF,CAAA;AAAA,oBACAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,0DAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wIAAA,EACZ,QAAA,EAAA,eAAA,mBACGA,cAAAA,CAAC,KAAA,EAAA,EAAI,GAAA,EAAK,OAAA,EAAS,GAAA,EAAK,OAAA,EAAS,SAAA,EAAU,4DAA2D,OAAA,EAAS,MAAM,gBAAA,CAAiB,IAAI,CAAA,EAAG,CAAA,mBAC7IA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,qNAAA,EAAuN,QAAA,EAAA,aAAA,EAAc,CAAA,EAC3P,CAAA;AAAA,sBACAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yBAAA,EACb,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+PAAA,EACZ,QAAA,EAAA,SAAA,EACH,CAAA;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uMACZ,QAAA,EAAA,WAAA,EACH;AAAA,OAAA,EACF;AAAA,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AClDO,SAAS,cAAA,CAAgB,EAAE,MAAA,EAAO,EAAwB;AAC/D,EAAA,QAAQ,MAAA;AAAQ,IACd,KAAK,WAAA;AACH,MAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sJAAA,EACb,0BAAAA,cAAAA,CAAC0C,sBAAA,EAAA,EAAmB,SAAA,EAAU,gEAAA,EAAiE,CAAA,EACjG,CAAA;AAAA,IAEJ,KAAK,YAAA;AACH,MAAA,uBACE1C,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sJAAA,EACb,0BAAAA,cAAAA,CAAC2C,iBAAA,EAAA,EAAc,SAAA,EAAU,gEAAA,EAAiE,CAAA,EAC5F,CAAA;AAAA,IAEJ,KAAK,QAAA;AACH,MAAA,uBACE3C,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sJAAA,EACb,0BAAAA,cAAAA,CAAC4C,wBAAA,EAAA,EAAqB,SAAA,EAAU,8DAAA,EAA+D,CAAA,EACjG,CAAA;AAAA;AAGR;ACnBO,SAAS,cAAA,CAAgB;AAAA,EAC9B,IAAA;AAAA,EACA,aAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,EAAwB;AAEtB,EAAA,IAAI,KAAK,UAAA,EAAY;AACnB,IAAA,MAAMC,eAAAA,GACJ,IAAA,CAAK,MAAA,KAAW,WAAA,GACZ,uDAAA,GACA,IAAA,CAAK,MAAA,KAAW,YAAA,GACd,yDAAA,GACA,IAAA,CAAK,MAAA,KAAW,QAAA,GACd,sDAAA,GACA,gEAAA;AAEV,IAAA,uBAAO7C,eAAC,MAAA,EAAA,EAAK,SAAA,EAAW,sGAAsG6C,eAAc,CAAA,CAAA,EAAK,eAAK,UAAA,EAAW,CAAA;AAAA,EACnK;AAGA,EAAA,IAAI,IAAA,CAAK,MAAA,KAAW,WAAA,IAAe,IAAA,CAAK,WAAA,EAAa;AACnD,IAAA,uBACE7C,cAAAA;AAAA,MAAC,GAAA;AAAA,MAAA;AAAA,QACC,MAAM,IAAA,CAAK,WAAA;AAAA,QACX,MAAA,EAAO,QAAA;AAAA,QACP,GAAA,EAAI,qBAAA;AAAA,QACJ,SAAA,EAAU,wLAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA,KACH;AAAA,EAEJ;AAGA,EAAA,MAAM,WAAA,GACJ,KAAK,MAAA,KAAW,WAAA,GACZ,gBACA,IAAA,CAAK,MAAA,KAAW,eACd,cAAA,GACA,UAAA;AAER,EAAA,MAAM,cAAA,GACJ,KAAK,MAAA,KAAW,WAAA,GACZ,0DACA,IAAA,CAAK,MAAA,KAAW,eACd,yDAAA,GACA,sDAAA;AAER,EAAA,uBAAOA,cAAAA,CAAC,MAAA,EAAA,EAAK,WAAW,CAAA,mGAAA,EAAsG,cAAc,IAAK,QAAA,EAAA,WAAA,EAAY,CAAA;AAC/J;AClDO,SAAS,YAAa,EAAE,IAAA,EAAM,eAAe,cAAA,EAAgB,UAAA,EAAY,oBAAmB,EAAqB;AACtH,EAAA,uBACEE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iFAAA,EACb,QAAA,EAAA;AAAA,oBAAAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,iNAAA,EACV,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA,EACF,CAAA;AAAA,oBACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iBACZ,QAAA,EAAA,IAAA,CAAK,KAAA,mBAEFA,cAAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,8JACb,QAAA,EAAA,IAAA,CAAK,KAAA,EACR,CAAA,mBAGAA,cAAAA,CAAC,cAAA,EAAA,EAAe,MAAY,aAAA,EAA8B,cAAA,EAAgC,UAAA,EAAwB,kBAAA,EAAwC,CAAA,EAEhK;AAAA,GAAA,EACF,CAAA;AAEJ;ACPO,SAAS,4BAAA,CAA8B;AAAA,EAC5C,KAAA;AAAA,EACA,SAAA,GAAY,iGAAA;AAAA,EACZ,WAAA,GAAc,IAAA;AAAA,EACd;AACF,CAAA,EAAsC;AACpC,EAAA,IAAI,CAAC,KAAA,IAAS,KAAA,CAAM,MAAA,KAAW,CAAA,EAAG;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AAEA,EAAA,MAAM,qBAAqB,MAAM;AAC/B,IAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wBACZ,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,CAAC,IAAA,EAAM,KAAA,qBAChBE,eAAAA,CAAC,KAAA,EAAA,EAA0B,WAAU,8CAAA,EAEnC,QAAA,EAAA;AAAA,sBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,4BAAA,EACZ,QAAA,EAAA;AAAA,QAAA,IAAA,CAAK,0BAAUF,cAAAA,CAAC,cAAA,EAAA,EAAe,MAAA,EAAQ,KAAK,MAAA,EAAQ,CAAA;AAAA,QACpD,KAAA,GAAQ,KAAA,CAAM,MAAA,GAAS,CAAA,IAAK,IAAA,CAAK,0BAChCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,kHAAA,EAAmH;AAAA,OAAA,EAEtI,CAAA;AAAA,sBAGAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+DACb,QAAA,kBAAAA,cAAAA,CAAC,eAAY,IAAA,EAAY,aAAA,EAAe,OAAO,aAAA,EAAe,cAAA,EAAgB,OAAO,cAAA,EAAgB,UAAA,EAAY,OAAO,UAAA,EAAY,kBAAA,EAAoB,MAAA,CAAO,kBAAA,EAAoB,CAAA,EACrL;AAAA,KAAA,EAAA,EAZQ,CAAA,KAAA,EAAQ,KAAK,CAAA,CAavB,CACD,CAAA,EACH,CAAA;AAAA,EAEJ,CAAA;AAGA,EAAA,MAAM,KAAA,GAAQ;AAAA,IACZ;AAAA,MACE,KAAA,EAAO,EAAA;AAAA,MACP,OAAO,kBAAA,EAAmB;AAAA,MAC1B,cAAA,EAAgB;AAAA;AAClB,GACF;AAEA,EAAA,uBACEA,cAAAA;AAAA,IAAC,cAAA;AAAA,IAAA;AAAA,MACC,OAAO,MAAA,CAAO,KAAA;AAAA,MACd,KAAA;AAAA,MACA,WAAA;AAAA,MACA;AAAA;AAAA,GACF;AAEJ;ACpEO,IAAM,sBAA0D,CAAC;AAAA,EACtE,YAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,YAAA,GAAe,oBAAoB,QAAA,IAAY,KAAA,EAAO,MAAM,CAAA,EAAG,CAAC,CAAA,CAAE,WAAA,EAAa,CAAA;AACrF,EAAA,MAAM,WAAA,GAAc,mCAAmC,YAAY,CAAA,CAAA;AAEnE,EAAA,uBACEE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACb,QAAA,EAAA;AAAA,oBAAAF,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,KAAK,YAAA,IAAgB,WAAA;AAAA,QACrB,KAAK,QAAA,IAAY,EAAA;AAAA,QACjB,SAAA,EAAU,yEAAA;AAAA,QACV,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAC,CAAA,CAAE,OAA4B,GAAA,GAAM,WAAA;AAAA,QACvC;AAAA;AAAA,KACF;AAAA,IACC,gCACCA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,GAAA,EAAK,YAAA;AAAA,QACL,GAAA,EAAK,SAAA;AAAA,QACL,SAAA,EAAU,kLAAA;AAAA,QACV,OAAA,EAAS,CAAC,CAAA,KAAM;AACd,UAAC,CAAA,CAAE,MAAA,CAA4B,KAAA,CAAM,OAAA,GAAU,MAAA;AAAA,QACjD;AAAA;AAAA;AACF,GAAA,EAEJ,CAAA;AAEJ;ACdO,IAAM,qBAAwD,CAAC;AAAA,EACpE,eAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,wBAAA;AAAA,EACA,QAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,iBAAA;AAAA,EACA,mBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEE,eAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,wBAAA;AAAA,MACP,OAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA,EAAS,YAAA;AAAA,MACT,uBAAOF,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,yBAAyB,QAAA,EAAA,SAAA,EAAU,CAAA;AAAA,MAC5D,WAAA,kBACEE,eAAAA,CAAAyB,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,iBAAA;AAAA,QAAmB,GAAA;AAAA,wBACpBzB,eAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,6JAAA;AAAA,YACV,OAAA,EAAS,aAAA;AAAA,YAER,QAAA,EAAA;AAAA,cAAA,mBAAA;AAAA,cAAoB;AAAA;AAAA;AAAA;AACvB,OAAA,EACF,CAAA;AAAA,MAGF,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,eAAY,SAAA,EAAU,WAAA,EACrB,0BAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gGAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,eAAe,GAAA,EAAK,eAAA,EAAiB,WAAU,0DAAA,EAA2D,CAAA;AAAA,4BACpHE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,oBAAA;AAAA,gBAAqB,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC1B,CAAA;AAAA,8BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iQACZ,QAAA,EAAA,uBAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+VAAA,EACb,0BAAAA,cAAAA,CAAC8C,qBAAA,EAAA,EAAmB,SAAA,EAAU,SAAA,EAAU,CAAA,EAC1C,CAAA;AAAA,0BAEA5C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,aAAa,GAAA,EAAK,aAAA,EAAe,WAAU,0DAAA,EAA2D,CAAA;AAAA,4BAChHE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EAAsM,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBACjN,qBAAA;AAAA,gBAAsB,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC5B,CAAA;AAAA,8BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iQACZ,QAAA,EAAA,wBAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAEAA,cAAAA;AAAA,UAAC,4BAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,gBAAA;AAAA,YACP,SAAA,EAAU,iGAAA;AAAA,YACV,MAAA,EAAQ;AAAA;AAAA;AACV;AAAA;AAAA,GACF;AAEJ;ACrEO,IAAM,+BAA4E,CAAC;AAAA,EACxF,eAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,aAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA,uBAAA;AAAA,EACA,oBAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,wBAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEE,eAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,QAAA;AAAA,MACA,QAAA,EAAS,YAAA;AAAA,MACT,KAAA;AAAA,MACA,WAAA,kBACEA,eAAAA,CAAAyB,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,QAAa,GAAA;AAAA,wBACd3B,cAAAA;AAAA,UAAC,MAAA;AAAA,UAAA;AAAA,YACC,SAAA,EAAU,6JAAA;AAAA,YACV,OAAA,EAAS,aAAA;AAAA,YAER,QAAA,EAAA;AAAA;AAAA,SACH;AAAA,QAAO;AAAA,OAAA,EAET,CAAA;AAAA,MAGF,QAAA,EAAA;AAAA,wBAAAA,cAAAA,CAAC,eAAY,SAAA,EAAU,WAAA,EACrB,0BAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gGAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,cAAAA;AAAA,cAAC,mBAAA;AAAA,cAAA;AAAA,gBACC,YAAA,EAAc,aAAA;AAAA,gBACd,QAAA,EAAU,eAAA;AAAA,gBACV,OAAA,EAAS,aAAA;AAAA,gBACT,YAAA,EAAc,kBAAA;AAAA,gBACd,SAAA,EAAW;AAAA;AAAA,aACb;AAAA,4BACAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,oBAAA;AAAA,gBAAqB,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC1B,CAAA;AAAA,8BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iQACZ,QAAA,EAAA,uBAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+VAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC8C,qBAAAA,EAAA,EAAmB,SAAA,EAAU,SAAA,EAAU,CAAA,EAC1C,CAAA;AAAA,0BAEA5C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,cAAAA;AAAA,cAAC,mBAAA;AAAA,cAAA;AAAA,gBACC,YAAA,EAAc,WAAA;AAAA,gBACd,QAAA,EAAU,aAAA;AAAA,gBACV,OAAA,EAAS,kBAAA;AAAA,gBACT,YAAA,EAAc,uBAAA;AAAA,gBACd,SAAA,EAAW;AAAA;AAAA,aACb;AAAA,4BACAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EAAsM,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBACjN,qBAAA;AAAA,gBAAsB,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC5B,CAAA;AAAA,8BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iQACZ,QAAA,EAAA,wBAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAEAA,cAAAA;AAAA,UAAC,4BAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,gBAAA;AAAA,YACP,SAAA,EAAU,iGAAA;AAAA,YACV,MAAA,EAAQ;AAAA;AAAA;AACV;AAAA;AAAA,GACF;AAEJ;ACnGO,IAAM,2BAAoE,CAAC;AAAA,EAChF,eAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,wBAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEE,eAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,+BAAA;AAAA,MACP,OAAA,EAAS,QAAA;AAAA,MACT,QAAA;AAAA,MACA,QAAA,EAAS,SAAA;AAAA,MACT,uBAAOF,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,gCAAgC,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,MACpE,WAAA,EAAa,gBAAA;AAAA,MACb,yBACEE,eAAAA,CAAC,SAAI,aAAA,EAAY,gCAAA,EAAiC,WAAU,qDAAA,EAC1D,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,mBAAgB,aAAA,EAAY,+BAAA,EAAgC,WAAU,QAAA,EAAS,OAAA,EAAS,UACtF,QAAA,EAAA,gBAAA,EACH,CAAA;AAAA,wBACAA,eAAC,aAAA,EAAA,EAAc,aAAA,EAAY,gCAA+B,SAAA,EAAU,QAAA,EAAS,OAAA,EAAS,UAAA,EACnF,QAAA,EAAA,eAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,MAGF,QAAA,EAAA;AAAA,wBAAAA,cAAAA,CAAC,eAAY,SAAA,EAAU,WAAA,EACrB,0BAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gGAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,eAAe,GAAA,EAAK,eAAA,EAAiB,WAAU,0DAAA,EAA2D,CAAA;AAAA,4BACpHE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,oBAAA;AAAA,gBAAqB,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC1B,CAAA;AAAA,8BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iQACZ,QAAA,EAAA,uBAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+VAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC8C,qBAAAA,EAAA,EAAmB,SAAA,EAAU,SAAA,EAAU,CAAA,EAC1C,CAAA;AAAA,0BAEA5C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,aAAa,GAAA,EAAK,aAAA,EAAe,WAAU,0DAAA,EAA2D,CAAA;AAAA,4BAChHE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EAAsM,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBACjN,qBAAA;AAAA,gBAAsB,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC5B,CAAA;AAAA,8BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iQACZ,QAAA,EAAA,wBAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAEAA,cAAAA;AAAA,UAAC,4BAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,gBAAA;AAAA,YACP,WAAA,EAAW,IAAA;AAAA,YACX,SAAA,EAAU,iGAAA;AAAA,YACV,MAAA,EAAQ;AAAA;AAAA;AACV;AAAA;AAAA,GACF;AAEJ;AChFO,IAAM,kBAAkD,CAAC;AAAA,EAC9D,eAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,wBAAA;AAAA,EACA,gBAAA;AAAA,EACA,OAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEE,eAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,qBAAA;AAAA,MACP,OAAA;AAAA,MACA,QAAA,EAAU,GAAA;AAAA,MACV,QAAA,EAAS,SAAA;AAAA,MACT,uBAAOF,cAAAA,CAAC,UAAK,aAAA,EAAY,oBAAA,EAAsB,iBAAO,KAAA,EAAM,CAAA;AAAA,MAC5D,WAAA,kBACEE,eAAAA,CAAAyB,mBAAAA,EAAA,EACG,QAAA,EAAA;AAAA,QAAA,MAAA,CAAO,iBAAA;AAAA,QAAkB,GAAA;AAAA,wBAACzB,eAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,0DAAA,EAA4D,QAAA,EAAA;AAAA,UAAA,oBAAA;AAAA,UAAqB,GAAA;AAAA,UAAE;AAAA,SAAA,EAAgB,CAAA;AAAA,QAAS,GAAA;AAAA,QAAE,MAAA,CAAO,iBAAA;AAAA,QAAmB,GAAA;AAAA,wBACrLA,eAAAA,CAAC,QAAA,EAAA,EAAO,SAAA,EAAU,0DAAA,EAA4D,QAAA,EAAA;AAAA,UAAA,qBAAA;AAAA,UAAsB,GAAA;AAAA,UAAE;AAAA,SAAA,EAAc,CAAA;AAAA,wBACpHF,eAAC,IAAA,EAAA,EAAG,CAAA;AAAA,QACH,MAAA,CAAO,iBAAA;AAAA,QAAmB,GAAA;AAAA,wBAC3BA,eAAC,QAAA,EAAA,EAAO,SAAA,EAAU,kIAAiI,OAAA,EAAS,YAAA,EACzJ,iBAAO,cAAA,EACV;AAAA,OAAA,EACF,CAAA;AAAA,MAEF,yBACEA,cAAAA,CAAC,SAAI,aAAA,EAAY,wBAAA,EAAyB,WAAU,QAAA,EAClD,QAAA,kBAAAA,eAAC,aAAA,EAAA,EAAc,aAAA,EAAY,yBAAwB,SAAA,EAAU,QAAA,EAAS,SAAS,cAAA,EAC5E,QAAA,EAAA,MAAA,CAAO,oBACV,CAAA,EACF,CAAA;AAAA,MAGF,QAAA,EAAA;AAAA,wBAAAA,cAAAA,CAAC,eAAY,SAAA,EAAU,WAAA,EACrB,0BAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gGAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,eAAe,GAAA,EAAK,eAAA,EAAiB,WAAU,0DAAA,EAA2D,CAAA;AAAA,4BACpHE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EACZ,QAAA,EAAA;AAAA,gBAAA,oBAAA;AAAA,gBAAqB,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC1B,CAAA;AAAA,8BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iQACZ,QAAA,EAAA,uBAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+VAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC8C,qBAAAA,EAAA,EAAmB,SAAA,EAAU,SAAA,EAAU,CAAA,EAC1C,CAAA;AAAA,0BAEA5C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,aAAa,GAAA,EAAK,aAAA,EAAe,WAAU,0DAAA,EAA2D,CAAA;AAAA,4BAChHE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EAAsM,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBACjN,qBAAA;AAAA,gBAAsB,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC5B,CAAA;AAAA,8BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iQACZ,QAAA,EAAA,wBAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAEAA,cAAAA;AAAA,UAAC,4BAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,gBAAA;AAAA,YACP,WAAA,EAAW,IAAA;AAAA,YACX,SAAA,EAAU,iGAAA;AAAA,YACV,MAAA,EAAQ;AAAA;AAAA;AACV;AAAA;AAAA,GACF;AAEJ;AC9EO,IAAM,4BAAsE,CAAC;AAAA,EAClF,eAAA;AAAA,EACA,aAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,oBAAA;AAAA,EACA,qBAAA;AAAA,EACA,uBAAA;AAAA,EACA,wBAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,MAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,kBAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEE,eAAAA;AAAA,IAAC,iBAAA;AAAA,IAAA;AAAA,MACC,MAAA,EAAO,oBAAA;AAAA,MACP,OAAA,EAAS,MAAA;AAAA,MACT,QAAA;AAAA,MACA,QAAA,EAAS,SAAA;AAAA,MACT,YAAA,EAAa,kJAAA;AAAA,MACb,uBAAOF,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,qBAAqB,QAAA,EAAA,UAAA,EAAW,CAAA;AAAA,MACzD,WAAA,EAAa,gBAAA;AAAA,MACb,yBACEE,eAAAA,CAAC,SAAI,aAAA,EAAY,qBAAA,EAAsB,WAAU,qDAAA,EAC/C,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,eAAA,EAAA,EAAgB,aAAA,EAAY,2BAAA,EAA4B,SAAA,EAAU,QAAA,EAAS,OAAA,EAAS,cAAA,EAAgB,QAAA,EAAU,CAAC,eAAA,EAC7G,QAAA,EAAA,kBAAA,EACH,CAAA;AAAA,wBACAA,eAAC,aAAA,EAAA,EAAc,aAAA,EAAY,qBAAoB,SAAA,EAAU,QAAA,EAAS,OAAA,EAAS,UAAA,EACxE,QAAA,EAAA,eAAA,EACH;AAAA,OAAA,EACF,CAAA;AAAA,MAGF,QAAA,EAAA;AAAA,wBAAAA,cAAAA,CAAC,eAAY,SAAA,EAAU,WAAA,EACrB,0BAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,gGAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,eAAe,GAAA,EAAK,eAAA,EAAiB,WAAU,0DAAA,EAA2D,CAAA;AAAA,4BACpHE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EAAsM,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBACjN,oBAAA;AAAA,gBAAqB,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC3B,CAAA;AAAA,8BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iQACZ,QAAA,EAAA,uBAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF,CAAA;AAAA,0BAEAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,+VAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC8C,qBAAAA,EAAA,EAAmB,SAAA,EAAU,SAAA,EAAU,CAAA,EAC1C,CAAA;AAAA,0BAEA5C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,eAAC,KAAA,EAAA,EAAI,GAAA,EAAK,aAAa,GAAA,EAAK,aAAA,EAAe,WAAU,0DAAA,EAA2D,CAAA;AAAA,4BAChHE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oEAAA,EACb,QAAA,EAAA;AAAA,8BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,qMAAA,EAAsM,QAAA,EAAA;AAAA,gBAAA,GAAA;AAAA,gBACjN,qBAAA;AAAA,gBAAsB,GAAA;AAAA,gBAAE;AAAA,eAAA,EAC5B,CAAA;AAAA,8BACAF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,iQACZ,QAAA,EAAA,wBAAA,EACH;AAAA,aAAA,EACF;AAAA,WAAA,EACF;AAAA,SAAA,EACF,CAAA,EACF,CAAA;AAAA,wBAEAA,cAAAA;AAAA,UAAC,4BAAA;AAAA,UAAA;AAAA,YACC,KAAA,EAAO,gBAAA;AAAA,YACP,WAAA,EAAW,IAAA;AAAA,YACX,SAAA,EAAU,iGAAA;AAAA,YACV,MAAA,EAAQ;AAAA;AAAA;AACV;AAAA;AAAA,GACF;AAEJ;AC9EO,IAAM,wBAA8D,CAAC;AAAA,EAC1E,aAAA;AAAA,EACA,MAAA;AAAA,EACA,oBAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA,OAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,CAAC,WAAA,EAAa,cAAc,CAAA,GAAIG,yBAAAA,CAAM,SAAS,EAAE,CAAA;AAEvD,EAAA,MAAM,YAAA,GAAe,CAAC,KAAA,KAAkB;AACtC,IAAA,cAAA,CAAe,KAAK,CAAA;AACpB,IAAA,QAAA,CAAS,KAAK,CAAA;AAAA,EAChB,CAAA;AAEA,EAAA,uBACEH,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uBAAsB,aAAA,EAAa,CAAA,+BAAA,EAAkC,aAAa,CAAA,CAAA,EAC/F,QAAA,kBAAAA,cAAAA;AAAA,IAAC,WAAA;AAAA,IAAA;AAAA,MACC,EAAA,EAAI,aAAA;AAAA,MACJ,oBAAA;AAAA,MACA,MAAA;AAAA,MACA,OAAA;AAAA,MACA,QAAA,EAAS,QAAA;AAAA,MACT,MAAA,EAAO,MAAA;AAAA,MACP,gBAAA,EAAiB,8BAAA;AAAA,MAEjB,QAAA,kBAAAE,eAAAA,CAAC,mBAAA,EAAA,EAAoB,SAAA,EAAU,sBAAA,EAC7B,QAAA,EAAA;AAAA,wBAAAF,cAAAA,CAAC,MAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAACkC,YAAAA,EAAA,EAAY,MAAA,EAAQ,CAAA,6BAAA,EAAgC,aAAa,CAAA,CAAA,EAAI,OAAA,EAAS,OAAA,EAAS,CAAA,EAC1F,CAAA;AAAA,wBACAhC,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uIAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,eAAA,EACb,QAAA,EAAA;AAAA,4BAAAF,cAAAA,CAAC,WAAA,EAAA,EAAa,QAAA,EAAA,MAAA,CAAO,KAAA,EAAM,CAAA;AAAA,4BAC3BA,eAAC,IAAA,EAAA,EAAG,CAAA;AAAA,4BACJA,cAAAA;AAAA,cAACqC,YAAAA;AAAA,cAAA;AAAA,gBACC,QAAA,EAAU,YAAA;AAAA,gBACV,aAAa,MAAA,CAAO,iBAAA;AAAA,gBACpB,SAAA;AAAA,gBACA,cAAA,EAAe,iGAAA;AAAA,gBACf,eAAA,EAAiB,+BAA+B,aAAa,CAAA,CAAA;AAAA,gBAC7D,WAAA,EAAa,2BAA2B,aAAa,CAAA;AAAA;AAAA;AACvD,WAAA,EACF,CAAA;AAAA,UACE,WAAA,IAAe,gBAAgB,MAAA,KAAW,CAAA,IAAK,CAAC,UAAA,mBAE9CrC,eAAC,gBAAA,EAAA,EAAiB,KAAA,EAAO,OAAO,gBAAA,EAAkB,WAAA,EAAa,OAAO,sBAAA,EAAwB,CAAA,mBAG9FE,eAAAA,CAAC,KAAA,EAAA,EAAI,WAAU,oIAAA,EACZ,QAAA,EAAA;AAAA,YAAA,UAAA,oBACCF,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wFACb,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,2DAAA,EACb,QAAA,EAAA;AAAA,8BAAAF,eAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,sGAAqG,SAAA,EAAU,yDAAA,EAC9H,iBAAO,aAAA,EACV,CAAA;AAAA,8BACAA,eAAC,WAAA,EAAA,EAAY;AAAA,aAAA,EACf,CAAA,EACF,CAAA;AAAA,YAED,eAAA,CAAgB,GAAA,CAAI,CAAC,KAAA,EAAO,KAAA,KAAU;AACrC,cAAA,MAAM,OAAA,GAAU,YAAY,KAAK,CAAA;AACjC,cAAA,MAAM,aAAA,GAAgB,MAAA,CAAO,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,QAAQ,CAAA,IAAK,CAAA;AACnD,cAAA,MAAM,gBAAA,GAAA,CAAmB,mCAAS,QAAA,IAC9B,iBAAA,CAAkB,QAAQ,QAAA,EAAU,aAAA,EAAe,CAAC,CAAA,GACpD,GAAA;AAEJ,cAAA,uBACEE,eAAAA;AAAA,gBAAC,QAAA;AAAA,gBAAA;AAAA,kBACC,SAAA,EAAU,sBAAA;AAAA,kBACV,OAAA,EAAS,MAAM,YAAA,CAAa,KAAK,CAAA;AAAA,kBAEjC,aAAA,EAAa,mBAAmB,KAAA,CAAM,MAAA,CAAO,aAAa,CAAA,CAAA,EAAI,MAAM,OAAO,CAAA,CAAA;AAAA,kBAC3E,gBAAc,KAAA,CAAM,OAAA;AAAA,kBACpB,iBAAe,KAAA,CAAM,OAAA;AAAA,kBACrB,eAAa,KAAA,CAAM,MAAA;AAAA,kBAEnB,QAAA,EAAA;AAAA,oCAAAF,cAAAA,CAAC,gBAAA,EAAA,EACC,QAAA,kBAAAA,cAAAA,CAAC,SAAI,GAAA,EAAK,KAAA,CAAM,OAAA,IAAW,EAAA,EAAI,GAAA,EAAK,KAAA,CAAM,IAAA,EAAM,SAAA,EAAU,8DAA6D,CAAA,EACzH,CAAA;AAAA,oCACAE,gBAAC,eAAA,EAAA,EACC,QAAA,EAAA;AAAA,sCAAAF,cAAAA,CAAC,QAAA,EAAA,EAAU,QAAA,EAAA,KAAA,CAAM,IAAA,EAAK,CAAA;AAAA,sCACtBA,cAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,oGAAA,EAAsG,gBAAM,MAAA,EAAO;AAAA,qBAAA,EACvI,CAAA;AAAA,oCACAE,gBAAC,iBAAA,EAAA,EACC,QAAA,EAAA;AAAA,sCAAAF,cAAAA,CAAC,YAAU,QAAA,EAAA,gBAAA,EAAiB,CAAA;AAAA,sCAC5BA,cAAAA,CAAC,QAAA,EAAA,EAAS,OAAA,EAAQ,oGAAA,EAAsG,QAAA,EAAA,mBAAA,CAAoB,MAAA,CAAO,OAAA,IAAA,IAAA,GAAA,MAAA,GAAA,OAAA,CAAS,WAAW,CAAA,IAAK,CAAC,CAAA,EAAE;AAAA,qBAAA,EACjL;AAAA;AAAA,iBAAA;AAAA,gBAhBK,CAAA,MAAA,EAAS,KAAA,CAAM,OAAO,CAAA,CAAA,EAAI,KAAK,CAAA;AAAA,eAiBtC;AAAA,YAEJ,CAAC,CAAA;AAAA,YACA,OAAA,oBACCA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oGAAA,EACb,QAAA,kBAAAA,cAAAA,CAAC,cAAA,EAAA,EAAe,OAAA,EAAS,UAAA,EAAa,QAAA,EAAA,MAAA,CAAO,gBAAe,CAAA,EAC9D;AAAA,WAAA,EAEJ;AAAA,SAAA,EAEN;AAAA,OAAA,EACF;AAAA;AAAA,GACF,EACF,CAAA;AAEJ;ACjIO,IAAM,eAA4C,CAAC;AAAA,EACxD,MAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,YAAA;AAAA,EACA,MAAA;AAAA,EACA,gBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEE,eAAAA,CAAAyB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,oBAAA3B,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAY,gBAAA;AAAA,QACZ,SAAA,EAAU,wDAAA;AAAA,QAEV,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wEAAA,EACb,QAAA,EAAA;AAAA,0BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,yCAAA,EACb,QAAA,EAAA;AAAA,4BAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sBAAA,EACb,QAAA,EAAA;AAAA,8BAAAF,cAAAA,CAAC,WAAA,EAAA,EAAY,OAAA,EAAQ,IAAA,EAAK,SAAA,EAAU,cAAA,EAClC,QAAA,kBAAAA,cAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,iBAAA,EAAmB,QAAA,EAAA,MAAA,CAAO,OAAM,CAAA,EACpD,CAAA;AAAA,cACC,MAAA,CAAO,QAAA,oBACNA,cAAAA,CAAC,QAAA,EAAA,EAAS,SAAQ,YAAA,EAAa,SAAA,EAAU,cAAA,EACtC,QAAA,EAAA,MAAA,CAAO,QAAA,EACV;AAAA,aAAA,EAEJ,CAAA;AAAA,4BACAA,cAAAA;AAAA,cAAC,QAAA;AAAA,cAAA;AAAA,gBACC,aAAA,EAAY,qBAAA;AAAA,gBACZ,IAAA,EAAK,QAAA;AAAA,gBACL,OAAA,EAAS,cAAA;AAAA,gBACT,SAAA,EAAU,qKAAA;AAAA,gBACV,cAAY,MAAA,CAAO,gBAAA;AAAA,gBAEnB,QAAA,kBAAAA,cAAAA,CAAC+C,YAAA,EAAA,EAAU,SAAA,EAAU,SAAA,EAAU;AAAA;AAAA;AACjC,WAAA,EACF,CAAA;AAAA,0BACA7C,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6CAAA,EACZ,QAAA,EAAA;AAAA,YAAA,QAAA;AAAA,YACA,YAAA;AAAA,YACA;AAAA,WAAA,EACH,CAAA;AAAA,UACC,gBAAA;AAAA,0BACDF,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,SAAS,QAAA,EAAA,kBAAA,EAAmB;AAAA,SAAA,EAC7C;AAAA;AAAA,KACF;AAAA,oBACAA,cAAAA;AAAA,MAAC,KAAA;AAAA,MAAA;AAAA,QACC,aAAA,EAAY,kBAAA;AAAA,QACZ,SAAA,EAAU,2GAAA;AAAA,QAET,QAAA,EAAA;AAAA;AAAA;AACH,GAAA,EACF,CAAA;AAEJ;AC3CO,IAAM,mBAAoD,CAAC;AAAA,EAChE,MAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,cAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,cAAA;AAAA,EACA,iBAAA;AAAA,EACA,kBAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEA,eAAC,WAAA,EAAA,EAAY,SAAA,EAAU,wBACrB,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAAA;AAAA,QAAC,qBAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAA;AAAA,UACP,OAAA,EAAS,YAAA;AAAA,UACT,MAAA,EAAO,0BAAA;AAAA,UACP,kBAAkB,MAAA,CAAO;AAAA;AAAA,OAC3B;AAAA,sBACAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,YAAA;AAAA,UACR,SAAA,EAAU,iDAAA;AAAA,UAET,2CAEGE,eAAAA;AAAA,YAAC,QAAA;AAAA,YAAA;AAAA,cACC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,cAAA;AAAA,cACT,SAAA,EAAU,gGAAA;AAAA,cACV,aAAA,EAAY,mBAAA;AAAA,cAEX,QAAA,EAAA;AAAA,gBAAA,MAAA,CAAO,YAAA;AAAA,gBAAa,IAAA;AAAA,gBAAG,gBAAA;AAAA,gBAAiB,IAAA;AAAA,gBAAG,mBAAA;AAAA,gBAAoB;AAAA;AAAA;AAAA,WAClE,mBAGAA,eAAAA,CAAC,MAAA,EAAA,EAAK,eAAY,mBAAA,EACf,QAAA,EAAA;AAAA,YAAA,MAAA,CAAO,YAAA;AAAA,YAAa,IAAA;AAAA,YAAG,gBAAA;AAAA,YAAiB,IAAA;AAAA,YAAG,mBAAA;AAAA,YAAoB;AAAA,WAAA,EAClE;AAAA;AAAA,OAEN;AAAA,sBACAF,cAAAA;AAAA,QAAC,uBAAA;AAAA,QAAA;AAAA,UACC,UAAA;AAAA,UACA,UAAA;AAAA,UACA,OAAA,EAAS,cAAA;AAAA,UACT,gBAAgB,MAAA,CAAO,cAAA;AAAA,UACvB,MAAA,EAAO;AAAA;AAAA;AACT,KAAA,EACF,CAAA;AAAA,oBACAA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,wDACZ,QAAA,EAAA,UAAA,IAAA,IAAA,GAAA,UAAA,mBACCE,eAAAA,CAAAyB,mBAAAA,EAAA,EACE,QAAA,EAAA;AAAA,sBAAA3B,cAAAA;AAAA,QAAC,mBAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,WAAA;AAAA,UACP,QAAA,EAAU,cAAA;AAAA,UACV,QAAA,EAAU,cAAA;AAAA,UACV,iBAAA;AAAA,UACA,WAAW,MAAA,CAAO;AAAA;AAAA,OACpB;AAAA,sBACAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,MAAA;AAAA,UACH,OAAA,EAAQ,YAAA;AAAA,UACR,SAAA,EACE,iBACI,wCAAA,GACA,iDAAA;AAAA,UAGL,QAAA,EAAA,kBAAA,mBAAqBA,cAAAA,CAAC,WAAA,EAAA,EAAY,CAAA,GAAK;AAAA;AAAA;AAC1C,KAAA,EACF,CAAA,EAEJ;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;ACxFO,IAAM,iBAAgD,CAAC;AAAA,EAC5D,MAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,eAAA;AAAA,EACA,kBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,iBAAiB,MAAA,CAAO,mBAAA,mBAE1BE,eAAAA,CAAAyB,qBAAA,EACG,QAAA,EAAA;AAAA,IAAA,MAAA,CAAO,mBAAA;AAAA,oBACR3B,eAAC,WAAA,EAAA,EAAY;AAAA,GAAA,EACf,CAAA,GAEA,MAAA;AAEJ,EAAA,uBACEA,eAAC,WAAA,EAAA,EAAY,SAAA,EAAU,wBACrB,QAAA,kBAAAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,mCAAA,EACb,QAAA,EAAA;AAAA,oBAAAA,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,6BAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAAA;AAAA,QAAC,qBAAA;AAAA,QAAA;AAAA,UACC,KAAA,EAAO,aAAA;AAAA,UACP,OAAA,EAAS,YAAA;AAAA,UACT,MAAA,EAAO,wBAAA;AAAA,UACP,kBAAkB,MAAA,CAAO;AAAA;AAAA,OAC3B;AAAA,sBACAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,OAAA,EAAQ,YAAA;AAAA,UACR,SAAA,EAAU,iDAAA;AAAA,UAEV,QAAA,kBAAAE,eAAAA,CAAC,MAAA,EAAA,EAAK,aAAA,EAAY,iBAAA,EACf,QAAA,EAAA;AAAA,YAAA,MAAA,CAAO,YAAA;AAAA,YAAa,IAAA;AAAA,YAAG,gBAAA;AAAA,YAAiB,IAAA;AAAA,YAAG,mBAAA;AAAA,YAAoB;AAAA,WAAA,EAClE;AAAA;AAAA,OACF;AAAA,sBACAF,cAAAA;AAAA,QAAC,uBAAA;AAAA,QAAA;AAAA,UACC,UAAA;AAAA,UACA,UAAA;AAAA,UACA,OAAA,EAAS,cAAA;AAAA,UACT,gBAAgB,MAAA,CAAO,cAAA;AAAA,UACvB,MAAA,EAAO;AAAA;AAAA;AACT,KAAA,EACF,CAAA;AAAA,oBACAE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,sDAAA,EACb,QAAA,EAAA;AAAA,sBAAAF,cAAAA;AAAA,QAAC,oBAAA;AAAA,QAAA;AAAA,UACC,aAAA,EAAe,YAAA;AAAA,UACf,SAAA,EAAW,eAAA;AAAA,UACX,cAAA;AAAA,UACA,qBAAqB,MAAA,CAAO;AAAA;AAAA,OAC9B;AAAA,sBACAA,cAAAA;AAAA,QAAC,QAAA;AAAA,QAAA;AAAA,UACC,EAAA,EAAG,MAAA;AAAA,UACH,OAAA,EAAQ,YAAA;AAAA,UACR,SAAA,EAAU,iDAAA;AAAA,UAET,QAAA,EAAA,kBAAA,mBAAqBA,cAAAA,CAAC,WAAA,EAAA,EAAY,CAAA,GAAK;AAAA;AAAA;AAC1C,KAAA,EACF;AAAA,GAAA,EACF,CAAA,EACF,CAAA;AAEJ;AC/DO,IAAM,uBAA4D,CAAC;AAAA,EACxE,MAAA;AAAA,EACA,SAAA;AAAA,EACA,SAAA;AAAA,EACA,gBAAA;AAAA,EACA,YAAA;AAAA,EACA,qBAAA;AAAA,EACA,kBAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,WAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,OAAA;AAAA,EACA,aAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,MAAM,WAAA,GAAc,SAAA,mBAEhBE,eAAAA,CAAAyB,qBAAA,EACG,QAAA,EAAA;AAAA,IAAA,gBAAA;AAAA,oBACD3B,eAAC,WAAA,EAAA,EAAY;AAAA,GAAA,EACf,CAAA,GAGE,gBAAA;AAGN,EAAA,MAAM,KAAA,GAAsB;AAAA,IAC1B;AAAA,MACE,KAAA,EAAO,EAAA;AAAA,MACP,uBACEA,cAAAA,CAAC,mBAAA,EAAA,EAAoB,KAAA,EAAO,aAAa,YAAA,EAA4B,CAAA;AAAA,MAEvE,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA;AAAA,MACE,OAAO,MAAA,CAAO,iBAAA;AAAA,MACd,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,KAAA,EAAO,EAAA;AAAA,MACP,uBACEA,cAAAA;AAAA,QAAC,4BAAA;AAAA,QAAA;AAAA,UACC,kBAAA;AAAA,UACA,aAAA;AAAA,UACA,gBAAA;AAAA,UACA,WAAA;AAAA,UACA,sBAAsB,MAAA,CAAO,oBAAA;AAAA,UAC7B,iBAAiB,MAAA,CAAO,eAAA;AAAA,UACxB,kBAAkB,MAAA,CAAO,gBAAA;AAAA,UACzB,eAAe,MAAA,CAAO,kBAAA;AAAA,UACtB,aAAa,MAAA,CAAO;AAAA;AAAA,OACtB;AAAA,MAEF,cAAA,EAAgB;AAAA,KAClB;AAAA,IACA;AAAA,MACE,OAAO,MAAA,CAAO,aAAA;AAAA,MACd,KAAA,EAAO;AAAA,KACT;AAAA,IACA;AAAA,MACE,OAAO,MAAA,CAAO,QAAA;AAAA,MACd,KAAA,EAAO;AAAA;AACT,GACF;AAEA,EAAA,IAAI,OAAA,EAAS;AACX,IAAA,KAAA,CAAM,KAAK,EAAE,KAAA,EAAO,OAAO,YAAA,EAAc,KAAA,EAAO,SAAS,CAAA;AAAA,EAC3D;AAEA,EAAA,uBACEE,eAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,QAAA,EACb,QAAA,EAAA;AAAA,oBAAAF,cAAAA;AAAA,MAAC,cAAA;AAAA,MAAA;AAAA,QAEC,OAAO,MAAA,CAAO,WAAA;AAAA,QACd,KAAA;AAAA,QACA,WAAA,EAAa,SAAA;AAAA,QACb,SAAA,EAAU;AAAA,OAAA;AAAA,MAJL,WAAW,SAAS,CAAA;AAAA,KAK3B;AAAA,oBACAA,cAAAA;AAAA,MAAC,mBAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,gBAAA;AAAA,QACA,iBAAA;AAAA,QACA;AAAA;AAAA;AACF,GAAA,EACF,CAAA;AAEJ;ACjGO,IAAM,2BAAoE,CAAC;AAAA,EAChF,KAAA;AAAA,EACA,MAAA;AAAA,EACA,YAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,iBAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEA,eAAC,KAAA,EAAA,EAAI,SAAA,EAAU,cACb,QAAA,kBAAAA,cAAAA,CAAC,eACC,QAAA,kBAAAE,eAAAA;AAAA,IAAC,kBAAA;AAAA,IAAA;AAAA,MACC,KAAA;AAAA,MACA,QAAA,EAAU,iBAAA;AAAA,MACV,IAAA,EAAM,MAAA;AAAA,MACN,YAAA;AAAA,MACA,YAAA;AAAA,MACA,UAAA;AAAA,MAEA,QAAA,EAAA;AAAA,wBAAAF,cAAAA;AAAA,UAAC,gCAAA;AAAA,UAAA;AAAA,YACC,WAAA;AAAA,YACA,QAAA,EAAU,gBAAA;AAAA,YACV,gBAAA;AAAA,YACA,SAAA,EAAU;AAAA;AAAA,SACZ;AAAA,wBACAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,gBACb,QAAA,kBAAAA,cAAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,oBAAA,EACZ,QAAA,EAAA,iBAAA,CAAkB,GAAA,CAAI,CAAC,KAAK,KAAA,KAAU;AACrC,UAAA,MAAM,KAAA,GAAQ,KAAA,KAAU,iBAAA,CAAkB,MAAA,GAAS,CAAA;AACnD,UAAA,MAAM,KAAA,GAAQ,KAAA,GAAQ,QAAA,GAAW,CAAA,EAAG,MAAM,GAAG,CAAA,CAAA,CAAA;AAC7C,UAAA,uBACEA,cAAAA;AAAA,YAAC,gBAAA;AAAA,YAAA;AAAA,cAEC,IAAA,EAAK,QAAA;AAAA,cACL,OAAA,EAAS,MAAM,iBAAA,CAAkB,GAAG,CAAA;AAAA,cAEnC,QAAA,EAAA;AAAA,aAAA;AAAA,YAJI;AAAA,WAKP;AAAA,QAEJ,CAAC,GACH,CAAA,EACF;AAAA;AAAA;AAAA,KAEJ,CAAA,EACF,CAAA;AAEJ;AC5DO,IAAM,wBAA8D,CAAC;AAAA,EAC1E,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA;AACF,CAAA,KAAM;AACJ,EAAA,uBACEA,cAAAA,CAAC,KAAA,EAAA,EAAI,aAAA,EAAY,+BACf,QAAA,kBAAAE,eAAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,OAAA;AAAA,MACA,SAAA,EAAU,QAAA;AAAA,MACV,QAAA;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,WAAA;AAAA,QACA,SAAA,oBAAaF,cAAAA,CAAC,WAAA,EAAA,EAAY;AAAA;AAAA;AAAA,GAC7B,EACF,CAAA;AAEJ","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 { 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-[var(--deframe-widget-color-text-primary)]',\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-[var(--deframe-widget-color-text-primary-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-secondary)]',\n 'border-[color:var(--deframe-widget-color-border-secondary)]',\n 'hover:opacity-90',\n 'cursor-pointer',\n ].join(' '),\n disabled: [\n 'text-[color:var(--deframe-widget-color-text-secondary-disabled)]',\n 'border-[color:var(--deframe-widget-color-border-secondary-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-brand-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 error: 'border border-[var(--deframe-widget-color-state-error)]',\n disabled: [\n 'border',\n 'border-[var(--deframe-widget-color-border-primary-disabled)]',\n 'opacity-60',\n 'cursor-not-allowed',\n ].join(' '),\n default: 'border border-[var(--deframe-widget-color-border-primary)]',\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-brand-primary)]',\n 'underline',\n 'cursor-pointer',\n ].join(' '),\n disabled: [\n 'text-[var(--deframe-widget-color-brand-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'\n\ninterface TextProps extends React.HTMLAttributes<HTMLElement> {\n as?: keyof React.JSX.IntrinsicElements\n variantClass?: string\n}\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 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 'text-[color:var(--deframe-widget-color-text-primary)]'\n ].join(' ')\n\n const textClasses = twMerge(baseClasses, className)\n\n return React.createElement(\n Component,\n {\n ref,\n className: textClasses,\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 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 type AccentVariant = keyof typeof accentVariants\n const variantClass = accentVariants[variant as AccentVariant]\n const accentClasses = twMerge(variantClass, className)\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 {...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 className = '',\n ...props\n },\n ref\n ) => {\n const bodyVariants = {\n '[font-size:var(--deframe-widget-font-size-lg)] [line-height:var(--deframe-widget-font-leading-lg)]': [\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-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 type BodyVariant = keyof typeof bodyVariants\n const variantClass = bodyVariants[variant as BodyVariant]\n const bodyClasses = twMerge(variantClass, className)\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 {...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 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 type HeadingVariant = keyof typeof headingVariants\n const variantClass = headingVariants[variant as HeadingVariant]\n const headingClasses = twMerge(variantClass, className)\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 {...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='[font-size:var(--deframe-widget-font-size-md)] [line-height:var(--deframe-widget-font-leading-md)]'\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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]'\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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]'\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 { twMerge } from 'tailwind-merge'\nimport type { ComponentProps } from 'react'\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type StatCardValueTone = 'default' | 'positive' | 'negative' | 'warning' | 'brand'\nexport type StatCardTrendDirection = 'up' | 'down' | 'neutral'\n\nexport interface StatCardProps extends ComponentProps<'article'> {}\nexport interface StatCardHeaderProps extends ComponentProps<'div'> {}\nexport interface StatCardLabelProps extends ComponentProps<'p'> {}\nexport interface StatCardValueProps extends ComponentProps<'p'> {\n /** Controls the text colour of the value */\n tone?: StatCardValueTone\n /** Adjusts the font-size scale */\n size?: 'sm' | 'md' | 'lg'\n}\nexport interface StatCardDescriptionProps extends ComponentProps<'p'> {}\nexport interface StatCardTrendProps extends ComponentProps<'span'> {\n /** Arrow direction to display */\n direction: StatCardTrendDirection\n /** Formatted trend string, e.g. \"+12.5% (24h)\" */\n value: string\n}\nexport interface StatCardBadgeProps extends ComponentProps<'span'> {\n tone?: 'default' | 'positive' | 'negative' | 'warning' | 'brand'\n}\nexport interface StatCardDividerProps extends ComponentProps<'hr'> {}\nexport interface StatCardRowProps extends ComponentProps<'div'> {}\nexport interface StatCardIconProps extends ComponentProps<'div'> {}\n\n// ─── StatCard (root) ─────────────────────────────────────────────────────────\n\n/**\n * Root container for a stat/metric card.\n *\n * Compose with sub-components:\n * ```tsx\n * <StatCard>\n * <StatCardHeader>\n * <StatCardLabel>TOTAL DA CARTEIRA</StatCardLabel>\n * <StatCardBadge tone=\"positive\">LIVE</StatCardBadge>\n * </StatCardHeader>\n * <StatCardValue tone=\"positive\">$714,100.00</StatCardValue>\n * <StatCardTrend direction=\"up\" value=\"+12.5% (24h)\" />\n * <StatCardDescription>Soma do saldo por token (em USD).</StatCardDescription>\n * </StatCard>\n * ```\n */\nexport function StatCard ({ className, ...props }: StatCardProps) {\n const baseClasses = [\n 'w-full self-start flex flex-col gap-[var(--deframe-widget-size-gap-sm)]',\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 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-md)]',\n ].join(' ')\n\n const cardClasses = twMerge(baseClasses, className)\n\n return (\n <article\n data-slot='stat-card'\n data-test-id='stat-card'\n className={cardClasses}\n {...props}\n />\n )\n}\n\n// ─── StatCardHeader ───────────────────────────────────────────────────────────\n\n/**\n * Flex row for placing a label and a badge/icon side-by-side.\n */\nexport function StatCardHeader ({ className, ...props }: StatCardHeaderProps) {\n const baseClasses = 'flex items-center justify-between gap-[var(--deframe-widget-size-gap-sm)]'\n const headerClasses = twMerge(baseClasses, className)\n\n return (\n <div\n data-slot='stat-card-header'\n data-test-id='stat-card-header'\n className={headerClasses}\n {...props}\n />\n )\n}\n\n// ─── StatCardLabel ────────────────────────────────────────────────────────────\n\n/**\n * Small uppercase muted label — e.g. \"TOTAL DA CARTEIRA (USD)\".\n */\nexport function StatCardLabel ({ className, ...props }: StatCardLabelProps) {\n const baseClasses = [\n 'text-[color:var(--deframe-widget-color-text-tertiary)]',\n 'text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.08em]',\n '[line-height:1.4]',\n ].join(' ')\n\n const labelClasses = twMerge(baseClasses, className)\n\n return (\n <p\n data-slot='stat-card-label'\n data-test-id='stat-card-label'\n className={labelClasses}\n {...props}\n />\n )\n}\n\n// ─── StatCardValue ────────────────────────────────────────────────────────────\n\n/**\n * Primary value display — supports size and tone variants.\n *\n * | tone | colour |\n * |------------|---------------------------|\n * | `default` | `--deframe-widget-color-text-primary` |\n * | `positive` | `--deframe-widget-color-brand-primary` |\n * | `negative` | `--deframe-widget-color-state-error` |\n * | `warning` | `--deframe-widget-color-state-warning` |\n * | `brand` | `--deframe-widget-color-brand-secondary` |\n */\nexport function StatCardValue ({ tone = 'default', size = 'md', className, ...props }: StatCardValueProps) {\n const sizeClasses: Record<NonNullable<StatCardValueProps['size']>, string> = {\n sm: 'text-[20px]',\n md: 'text-[28px]',\n lg: 'text-[38px]',\n }\n\n const toneClasses: Record<StatCardValueTone, string> = {\n default: 'text-[color:var(--deframe-widget-color-text-primary)]',\n positive: 'text-[color:var(--deframe-widget-color-brand-primary)]',\n negative: 'text-[color:var(--deframe-widget-color-state-error)]',\n warning: 'text-[color:var(--deframe-widget-color-state-warning)]',\n brand: 'text-[color:var(--deframe-widget-color-brand-secondary)]',\n }\n\n const baseClasses = '[font-weight:var(--deframe-widget-font-weight-bold)] [line-height:1.15]'\n\n const valueClasses = twMerge(baseClasses, sizeClasses[size], toneClasses[tone], className)\n\n return (\n <p\n data-slot='stat-card-value'\n data-test-id='stat-card-value'\n className={valueClasses}\n {...props}\n />\n )\n}\n\n// ─── StatCardDescription ──────────────────────────────────────────────────────\n\n/**\n * Secondary small text — subtitle, footnote, or help text.\n */\nexport function StatCardDescription ({ className, ...props }: StatCardDescriptionProps) {\n const baseClasses = 'text-[color:var(--deframe-widget-color-text-secondary)] text-[13px] [line-height:1.45]'\n const descClasses = twMerge(baseClasses, className)\n\n return (\n <p\n data-slot='stat-card-description'\n data-test-id='stat-card-description'\n className={descClasses}\n {...props}\n />\n )\n}\n\n// ─── StatCardTrend ────────────────────────────────────────────────────────────\n\n/**\n * Inline trend indicator with a directional arrow.\n *\n * ```tsx\n * <StatCardTrend direction=\"up\" value=\"+12.5% (24h)\" />\n * <StatCardTrend direction=\"down\" value=\"-3.2% (7d)\" />\n * ```\n */\nexport function StatCardTrend ({ direction, value, className, ...props }: StatCardTrendProps) {\n const baseClasses = 'inline-flex items-center gap-[3px] text-[12px] [font-weight:var(--deframe-widget-font-weight-medium)] [line-height:1.4]'\n\n const directionClasses: Record<StatCardTrendDirection, string> = {\n up: 'text-[color:var(--deframe-widget-color-brand-primary)]',\n down: 'text-[color:var(--deframe-widget-color-state-error)]',\n neutral: 'text-[color:var(--deframe-widget-color-text-tertiary)]',\n }\n\n const trendClasses = twMerge(baseClasses, directionClasses[direction], className)\n\n const icons: Record<StatCardTrendDirection, React.ReactNode> = {\n up: (\n <svg width='10' height='10' viewBox='0 0 10 10' fill='none' aria-hidden='true'>\n <path d='M5 1.5L9 7H1L5 1.5Z' fill='currentColor' />\n </svg>\n ),\n down: (\n <svg width='10' height='10' viewBox='0 0 10 10' fill='none' aria-hidden='true'>\n <path d='M5 8.5L1 3H9L5 8.5Z' fill='currentColor' />\n </svg>\n ),\n neutral: (\n <svg width='12' height='12' viewBox='0 0 12 12' fill='none' aria-hidden='true'>\n <path d='M2 6H10M10 6L7 3M10 6L7 9' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' strokeLinejoin='round' />\n </svg>\n ),\n }\n\n return (\n <span\n data-slot='stat-card-trend'\n data-test-id='stat-card-trend'\n className={trendClasses}\n aria-label={`Tendência: ${direction === 'up' ? 'alta' : direction === 'down' ? 'baixa' : 'estável'} ${value}`}\n {...props}\n >\n {icons[direction]}\n {value}\n </span>\n )\n}\n\n// ─── StatCardBadge ────────────────────────────────────────────────────────────\n\n/**\n * Small pill badge — use for status labels like \"LIVE\", \"NEW\", \"ATIVO\".\n *\n * | tone | style |\n * |------------|-------------------------------------------|\n * | `default` | subtle border + muted text |\n * | `positive` | green dim bg + brand border + green text |\n * | `negative` | red dim bg + red border + red text |\n * | `warning` | amber dim bg + amber border + amber text |\n * | `brand` | brand tint bg + brand border + brand text |\n */\nexport function StatCardBadge ({ tone = 'default', className, ...props }: StatCardBadgeProps) {\n const baseClasses = [\n 'inline-flex items-center justify-center',\n 'px-[6px] py-[2px]',\n 'rounded-[var(--deframe-widget-size-radius-xs)]',\n 'text-[10px] [font-weight:var(--deframe-widget-font-weight-semibold)] uppercase tracking-[0.06em]',\n '[line-height:1.4]',\n ].join(' ')\n\n const toneClasses: Record<NonNullable<StatCardBadgeProps['tone']>, string> = {\n default: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)] border border-[color:var(--deframe-widget-color-border-secondary)] text-[color:var(--deframe-widget-color-text-secondary)]',\n positive: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] border border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]',\n negative: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)] border border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)] text-[color:var(--deframe-widget-color-state-error)]',\n warning: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_16%,transparent)] border border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_32%,transparent)] text-[color:var(--deframe-widget-color-state-warning)]',\n brand: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_18%,transparent)] border border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]',\n }\n\n const badgeClasses = twMerge(baseClasses, toneClasses[tone], className)\n\n return (\n <span\n data-slot='stat-card-badge'\n data-test-id='stat-card-badge'\n className={badgeClasses}\n {...props}\n />\n )\n}\n\n// ─── StatCardDivider ──────────────────────────────────────────────────────────\n\n/**\n * Horizontal rule separator between card sections.\n */\nexport function StatCardDivider ({ className, ...props }: StatCardDividerProps) {\n const dividerClasses = twMerge(\n 'border-none h-px bg-[var(--deframe-widget-color-border-secondary)] my-[var(--deframe-widget-size-gap-xs)]',\n className\n )\n\n return (\n <hr\n data-slot='stat-card-divider'\n data-test-id='stat-card-divider'\n className={dividerClasses}\n {...props}\n />\n )\n}\n\n// ─── StatCardRow ──────────────────────────────────────────────────────────────\n\n/**\n * Flex row for displaying a key-value pair side by side.\n * Useful for transaction detail lines inside a card.\n *\n * ```tsx\n * <StatCardRow>\n * <StatCardDescription>Taxa de rede</StatCardDescription>\n * <StatCardDescription>~$0.50</StatCardDescription>\n * </StatCardRow>\n * ```\n */\nexport function StatCardRow ({ className, ...props }: StatCardRowProps) {\n const baseClasses = 'flex items-center justify-between gap-[var(--deframe-widget-size-gap-sm)]'\n const rowClasses = twMerge(baseClasses, className)\n\n return (\n <div\n data-slot='stat-card-row'\n data-test-id='stat-card-row'\n className={rowClasses}\n {...props}\n />\n )\n}\n\n// ─── StatCardIcon ─────────────────────────────────────────────────────────────\n\n/**\n * Square icon container with brand-dim background.\n * Pass any SVG or icon element as children.\n *\n * ```tsx\n * <StatCardIcon aria-label=\"Portfolio\">\n * <svg>...</svg>\n * </StatCardIcon>\n * ```\n */\nexport function StatCardIcon ({ className, ...props }: StatCardIconProps) {\n const baseClasses = [\n 'flex items-center justify-center flex-shrink-0',\n 'w-9 h-9',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]',\n ].join(' ')\n\n const iconClasses = twMerge(baseClasses, className)\n\n return (\n <div\n data-slot='stat-card-icon'\n data-test-id='stat-card-icon'\n className={iconClasses}\n {...props}\n />\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface SegmentOption<V extends string = string> {\n value: V\n label: string\n icon?: React.ReactNode\n}\n\nexport interface SegmentedControlProps<V extends string = string> {\n options: SegmentOption<V>[]\n value: V\n onChange: (value: V) => void\n variant?: 'outlined' | 'ghost'\n size?: 'sm' | 'md'\n fullWidth?: boolean\n}\n\nconst sizeClasses = {\n sm: [\n 'h-[var(--deframe-widget-font-leading-sm)]',\n 'px-[var(--deframe-widget-size-padding-x-lg)]',\n '[font-size:var(--deframe-widget-font-size-md)]',\n '[line-height:var(--deframe-widget-font-leading-md)]',\n ].join(' '),\n md: [\n 'h-[var(--deframe-widget-font-leading-md)]',\n 'px-[var(--deframe-widget-size-padding-x-xl)]',\n '[font-size:var(--deframe-widget-font-size-lg)]',\n '[line-height:var(--deframe-widget-font-leading-lg)]',\n ].join(' '),\n} as const\n\nexport function SegmentedControl<V extends string = string> ({\n options,\n value,\n onChange,\n variant = 'outlined',\n size = 'md',\n fullWidth = false,\n}: SegmentedControlProps<V>) {\n const containerClasses = twMerge(\n 'inline-flex rounded-[var(--deframe-widget-size-radius-md)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'p-[3px] gap-[2px]',\n fullWidth ? 'w-full' : 'w-auto'\n )\n\n return (\n <div\n role='tablist'\n data-test-id='segmented-control'\n data-slot='segmented-control'\n className={containerClasses}\n >\n {options.map((opt) => {\n const isActive = opt.value === value\n const buttonClasses = twMerge(\n 'inline-flex items-center justify-center',\n 'gap-[var(--deframe-widget-size-gap-xs)]',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border-[length:var(--deframe-widget-size-border-sm)] border-solid',\n 'outline-none whitespace-nowrap transition-[background,color,border-color] duration-150',\n 'font-[var(--deframe-widget-font-family)]',\n '[font-weight:var(--deframe-widget-font-weight-medium)]',\n sizeClasses[size],\n fullWidth && 'flex-1',\n isActive\n ? variant === 'outlined'\n ? 'border-[color:var(--deframe-widget-color-brand-primary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)] text-[color:var(--deframe-widget-color-text-primary)]'\n : 'border-transparent bg-transparent text-[color:var(--deframe-widget-color-brand-primary)]'\n : 'border-transparent bg-transparent text-[color:var(--deframe-widget-color-text-secondary)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]'\n )\n\n return (\n <button\n key={opt.value}\n role='tab'\n aria-selected={isActive}\n data-test-id='segmented-control-option'\n data-slot='segmented-control-option'\n onClick={() => onChange(opt.value)}\n className={buttonClasses}\n >\n {opt.icon && (\n <span className='flex items-center'>{opt.icon}</span>\n )}\n {opt.label}\n </button>\n )\n })}\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\n// ── IconCircle ─────────────────────────────────────────────────────────────────\n\nexport interface IconCircleProps {\n item: { name: string; color: string; iconUrl?: string }\n size?: number\n className?: string\n}\n\n/**\n * Renders a circular icon — uses `iconUrl` if available, falls back to\n * a colored circle with the first 2 letters of `name`.\n */\nexport function IconCircle ({ item, size = 36, className }: IconCircleProps) {\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 data-slot='icon-circle'\n src={item.iconUrl}\n alt={item.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 data-slot='icon-circle'\n className={twMerge('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)]', className)}\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","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\n// ── CloseButton ────────────────────────────────────────────────────────────────\n\nexport interface CloseButtonProps extends React.ComponentProps<'button'> {\n onClick: () => void\n testId?: string\n}\n\n/** Icon-only × button — used in the modal/sheet header. */\nexport function CloseButton ({ onClick, className, testId, ...rest }: CloseButtonProps) {\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={testId ?? 'close-button'}\n data-slot='close-button'\n onClick={onClick}\n aria-label='Fechar'\n className={twMerge(baseClasses, className)}\n {...rest}\n >\n <svg\n data-test-id='close-button-icon'\n data-slot='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 { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport { IconCircle } from './IconCircle'\nimport type { Chain } from './types'\n\n// ── ChainRow ───────────────────────────────────────────────────────────────────\n\nexport interface ChainRowProps {\n chain: Chain\n selected: boolean\n onClick: () => void\n onKeyDown: (e: React.KeyboardEvent) => void\n index: number\n}\n\n/** Desktop sidebar row — shows chain icon, name, and optional balance. */\nexport function ChainRow ({ chain, selected, onClick, onKeyDown, index }: ChainRowProps) {\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='chain-row'\n data-slot='chain-row'\n role='option'\n aria-selected={selected}\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='chain-row-accent'\n data-slot='chain-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 data-test-id='chain-row-icon'\n data-slot='chain-row-icon'\n item={chain}\n size={34}\n />\n <div\n data-test-id='chain-row-content'\n data-slot='chain-row-content'\n className='flex-1 min-w-0'\n >\n <div\n data-test-id='chain-row-name'\n data-slot='chain-row-name'\n className={nameClasses}\n >\n {chain.name}\n </div>\n {chain.balanceUsd && (\n <div\n data-test-id='chain-row-balance'\n data-slot='chain-row-balance'\n className='text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)] mt-px'\n >\n {chain.balanceUsd}\n </div>\n )}\n </div>\n </motion.div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { IconCircle } from './IconCircle'\nimport type { Chain } from './types'\n\n// ── ChainChip ──────────────────────────────────────────────────────────────────\n\nexport interface ChainChipProps {\n chain: Chain\n selected: boolean\n onClick: () => void\n}\n\n/** Mobile horizontal scrollable chain chip. */\nexport function ChainChip ({ chain, selected, onClick }: ChainChipProps) {\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='chain-chip'\n data-slot='chain-chip'\n onClick={onClick}\n className={buttonClasses}\n >\n <IconCircle\n data-test-id='chain-chip-icon'\n data-slot='chain-chip-icon'\n item={chain}\n size={24}\n />\n <div\n data-test-id='chain-chip-content'\n data-slot='chain-chip-content'\n className='text-left'\n >\n <div\n data-test-id='chain-chip-label'\n data-slot='chain-chip-label'\n className={nameLabelClasses}\n >\n {chain.name}\n </div>\n {chain.balanceUsd && (\n <div\n data-test-id='chain-chip-balance'\n data-slot='chain-chip-balance'\n className='text-[11px] text-[color:var(--deframe-widget-color-text-tertiary)] leading-[1.4]'\n >\n {chain.balanceUsd}\n </div>\n )}\n </div>\n </button>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { IconCircle } from './IconCircle'\nimport type { Asset } from './types'\n\n// ── AssetRow ───────────────────────────────────────────────────────────────────\n\nexport interface AssetRowProps {\n asset: Asset\n /** Highlight as the top/default selection */\n first: boolean\n onClick: () => void\n onKeyDown: (e: React.KeyboardEvent) => void\n index: number\n /** Optional chain attribution shown below asset name (e.g. \"via Solana\") */\n chainName?: string\n /** Dot colour for chain attribution — data-driven, kept as style */\n chainColor?: string\n}\n\n/** Single row in the asset list — icon, name, symbol, optional balance, and optional chain attribution. */\nexport function AssetRow ({ asset, first, onClick, onKeyDown, index, chainName, chainColor }: AssetRowProps) {\n const hasBalance = asset.balance || asset.balanceUsd\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 stateClasses = {\n first: '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[first ? 'first' : 'default'])\n\n return (\n <div\n data-test-id='asset-row'\n data-slot='asset-row'\n role='option'\n aria-selected={first}\n tabIndex={0}\n onClick={onClick}\n onKeyDown={onKeyDown}\n data-asset-index={index}\n className={rowClasses}\n >\n {first && (\n <div\n data-test-id='asset-row-accent'\n data-slot='asset-row-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 />\n )}\n <IconCircle\n data-test-id='asset-row-icon'\n data-slot='asset-row-icon'\n item={asset}\n size={38}\n />\n <div\n data-test-id='asset-row-content'\n data-slot='asset-row-content'\n className='flex-1 min-w-0'\n >\n <div\n data-test-id='asset-row-symbol'\n data-slot='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 {asset.symbol}\n </div>\n <div\n data-test-id='asset-row-name'\n data-slot='asset-row-name'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] mt-px'\n >\n {asset.name}\n </div>\n {chainName && (\n <div\n data-test-id='asset-row-chain'\n data-slot='asset-row-chain'\n className='flex items-center gap-[var(--deframe-widget-size-gap-xs)] mt-[3px]'\n >\n {chainColor && (\n <span\n data-test-id='asset-row-chain-dot'\n data-slot='asset-row-chain-dot'\n className='inline-block w-[6px] h-[6px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0'\n style={{ background: chainColor }}\n />\n )}\n <span\n data-test-id='asset-row-chain-label'\n data-slot='asset-row-chain-label'\n className='text-[11px] text-[color:var(--deframe-widget-color-text-tertiary)]'\n >\n via {chainName}\n </span>\n </div>\n )}\n </div>\n {hasBalance\n ? (\n <div\n data-test-id='asset-row-balance'\n data-slot='asset-row-balance'\n className='flex-shrink-0 text-right'\n >\n {asset.balance && (\n <div\n data-test-id='asset-row-balance-amount'\n data-slot='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 {asset.balance}{' '}\n <span\n data-test-id='asset-row-balance-symbol'\n data-slot='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 {asset.symbol}\n </span>\n </div>\n )}\n {asset.balanceUsd && (\n <div\n data-test-id='asset-row-balance-usd'\n data-slot='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 {asset.balanceUsd}\n </div>\n )}\n </div>\n )\n : (\n <span\n data-test-id='asset-row-select-hint'\n data-slot='asset-row-select-hint'\n className='text-[13px] text-[color:var(--deframe-widget-color-brand-primary)] [font-weight:var(--deframe-widget-font-weight-medium)] whitespace-nowrap flex-shrink-0 opacity-0 translate-x-1 group-hover:opacity-100 group-hover:translate-x-0 transition-all duration-150'\n >\n Select →\n </span>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\n// ── SearchInput ────────────────────────────────────────────────────────────────\n\nexport interface SearchInputProps {\n value: string\n onChange: (value: string) => void\n placeholder?: string\n /** Called when ArrowDown is pressed — used to move focus to the first asset */\n onArrowDown?: () => void\n className?: string\n}\n\n/**\n * Controlled search input with magnifying-glass icon and green focus state.\n * Extracted from BlockchainAssetSelector — use SearchInput instead of the\n * inline <input> when composing custom layouts.\n */\nexport const SearchInput = React.forwardRef<HTMLInputElement, SearchInputProps>(\n ({ value, onChange, placeholder = 'Buscar por símbolo, nome ou endereço', onArrowDown, className }, ref) => {\n const wrapperClasses = twMerge('relative', className)\n\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 data-slot='search-input-wrapper'\n className={wrapperClasses}\n >\n <input\n data-test-id='search-input'\n data-slot='search-input'\n ref={ref}\n type='text'\n value={value}\n onChange={(e) => onChange(e.target.value)}\n placeholder={placeholder}\n aria-label='Buscar ativo'\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 data-slot='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)\nSearchInput.displayName = 'SearchInput'\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport type { FilterGroupItem } from './types'\n\n// ── FilterGroupBar ─────────────────────────────────────────────────────────────\n\nexport interface FilterGroupBarProps {\n groups: FilterGroupItem[]\n /** `id` of the currently active group */\n selected: string\n onSelect: (id: string) => void\n}\n\n/**\n * Horizontal scrollable row of text-only filter pills.\n *\n * Replaces the chain chip selector in BlockchainAssetSelector — lets the user\n * filter assets by semantic category (All, Most Used, Stablecoins, …) rather\n * than by blockchain network.\n */\nexport function FilterGroupBar ({ groups, selected, onSelect }: FilterGroupBarProps) {\n return (\n <div\n data-test-id='filter-group-bar'\n data-slot='filter-group-bar'\n role='tablist'\n aria-label='Filtrar ativos'\n className='flex gap-[var(--deframe-widget-size-gap-sm)] overflow-x-auto [scrollbar-width:none] px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)] flex-shrink-0'\n >\n {groups.map((group) => (\n <FilterPill\n key={group.id}\n group={group}\n isSelected={group.id === selected}\n onSelect={onSelect}\n />\n ))}\n </div>\n )\n}\n\n// ── Single pill ────────────────────────────────────────────────────────────────\n\ninterface FilterPillProps {\n group: FilterGroupItem\n isSelected: boolean\n onSelect: (id: string) => void\n}\n\nfunction FilterPill ({ group, isSelected, onSelect }: FilterPillProps) {\n const baseClasses = [\n 'inline-flex items-center',\n 'py-[6px] px-[14px]',\n 'rounded-[var(--deframe-widget-size-radius-full)]',\n 'text-[12px] [font-weight:var(--deframe-widget-font-weight-medium)]',\n 'cursor-pointer',\n 'flex-shrink-0',\n 'whitespace-nowrap',\n 'outline-none',\n 'font-[var(--deframe-widget-font-family)]',\n 'transition-all duration-150',\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)] text-[color:var(--deframe-widget-color-brand-primary)]',\n default: 'border-[color:var(--deframe-widget-color-border-secondary)] bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)] text-[color:var(--deframe-widget-color-text-secondary)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)]',\n } as const\n\n const pillClasses = twMerge(baseClasses, stateClasses[isSelected ? 'selected' : 'default'])\n\n return (\n <button\n data-test-id='filter-pill'\n data-slot='filter-pill'\n role='tab'\n aria-selected={isSelected}\n onClick={() => onSelect(group.id)}\n className={pillClasses}\n >\n <span\n data-test-id='filter-pill-label'\n data-slot='filter-pill-label'\n >\n {group.label}\n </span>\n </button>\n )\n}\n","'use client'\n\nimport * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { motion } from 'framer-motion'\nimport { IconCircle } from './IconCircle'\nimport { CloseButton } from './CloseButton'\nimport { ChainRow } from './ChainRow'\nimport { ChainChip } from './ChainChip'\nimport { AssetRow } from './AssetRow'\nimport { SearchInput } from './SearchInput'\nimport { Chip } from './Chip'\nimport { FilterGroupBar } from './FilterGroupBar'\nimport { SegmentedControl } from '../segmented-control/SegmentedControl'\nimport type { Chain, Asset, BlockchainAssetSelectorProps, FilterGroupItem } from './types'\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\n/** Parses \"$1,234.56\" → 1234.56. Returns -1 when no balance (sinks to bottom). */\nfunction parseUsd (s?: string): number {\n if (!s) return -1\n const n = parseFloat(s.replace(/[$,\\s]/g, ''))\n return isNaN(n) ? -1 : n\n}\n\nfunction useIsMobile (breakpoint = 640) {\n const [isMobile, setIsMobile] = React.useState(false)\n React.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\nconst DEFAULT_FILTER_GROUPS: FilterGroupItem[] = [\n { id: 'all', label: 'All' },\n { id: 'most-used', label: 'Most Used' },\n { id: 'stablecoin', label: 'Stablecoins' },\n]\n\n// ── SearchAndAssets sub-component ─────────────────────────────────────────────\n\nfunction SearchAndAssets ({\n query, setQuery, searchRef, assetListRef, filtered,\n isMobile, onSelect, handleAssetKeyDown,\n activeTab, onTabChange, visibleChains,\n filterGroups, selectedFilter, onFilterChange,\n}: {\n query: string\n setQuery: (q: string) => void\n searchRef: React.RefObject<HTMLInputElement | null>\n assetListRef: React.RefObject<HTMLDivElement | null>\n filtered: Asset[]\n isMobile: boolean\n onSelect: (asset: Asset) => void\n handleAssetKeyDown: (e: React.KeyboardEvent, asset: Asset, idx: number) => void\n activeTab: 'crypto' | 'stock'\n onTabChange: (tab: 'crypto' | 'stock') => void\n visibleChains: Chain[]\n filterGroups: FilterGroupItem[]\n selectedFilter: string\n onFilterChange: (id: string) => void\n}) {\n const tabPadding = isMobile ? 'px-[var(--deframe-widget-size-padding-x-md)] pb-[10px] pt-[var(--deframe-widget-size-padding-y-none)]' : 'px-[var(--deframe-widget-size-padding-x-md)] pb-[10px] pt-[var(--deframe-widget-size-padding-y-sm)]'\n\n return (\n <div\n data-slot='search-and-assets'\n data-test-id='search-and-assets'\n className='flex flex-col flex-1 overflow-hidden'\n >\n {/* Tab switcher */}\n <div\n data-slot='tab-switcher'\n data-test-id='tab-switcher'\n className={twMerge('flex-shrink-0', tabPadding)}\n >\n <SegmentedControl\n options={[\n { value: 'crypto', label: 'Crypto' },\n { value: 'stock', label: 'Stocks' },\n ]}\n value={activeTab}\n onChange={onTabChange}\n variant='outlined'\n fullWidth\n />\n </div>\n\n {/* Search input */}\n <div\n data-slot='search-wrapper'\n data-test-id='search-wrapper'\n className='px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)] flex-shrink-0'\n >\n <SearchInput\n ref={searchRef}\n value={query}\n onChange={setQuery}\n onArrowDown={() => {\n assetListRef.current?.querySelector<HTMLElement>(\"[data-asset-index='0']\")?.focus()\n }}\n />\n </div>\n\n {/* Filter group bar */}\n <FilterGroupBar\n groups={filterGroups}\n selected={selectedFilter}\n onSelect={onFilterChange}\n />\n\n {/* Section label */}\n <div\n data-slot='section-label'\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 {activeTab === 'stock' ? 'Ações' : 'Ativos'}\n </div>\n\n {/* Asset list */}\n <div\n ref={assetListRef}\n role='listbox'\n aria-label='Ativos disponíveis'\n data-slot='asset-list'\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 {visibleChains.length === 0\n ? (\n <div\n data-slot='empty-state'\n data-test-id='empty-state'\n className='py-[var(--deframe-widget-size-padding-y-xl)] px-[var(--deframe-widget-size-padding-x-md)] text-center'\n >\n <div className='text-[14px] text-[color:var(--deframe-widget-color-text-secondary)] mb-[var(--deframe-widget-size-gap-xs)]'>\n {activeTab === 'stock' ? 'Nenhuma ação disponível' : 'Nenhum ativo disponível'}\n </div>\n <div className='text-[12px] text-[color:var(--deframe-widget-color-text-tertiary)]'>\n {activeTab === 'stock'\n ? 'Mude para Crypto para ver as redes disponíveis'\n : 'Nenhuma rede suportada encontrada'}\n </div>\n </div>\n )\n : filtered.length === 0\n ? (\n <div\n data-slot='no-results'\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 text-[14px] text-[color:var(--deframe-widget-color-text-tertiary)]'\n >\n Nenhum ativo encontrado\n </div>\n )\n : (\n filtered.map((asset, i) => (\n <AssetRow\n key={asset.id}\n asset={asset}\n first={i === 0 && !query}\n onClick={() => onSelect(asset)}\n onKeyDown={(e) => handleAssetKeyDown(e, asset, i)}\n index={i}\n />\n ))\n )}\n </div>\n </div>\n )\n}\n\n// ── Main Component ────────────────────────────────────────────────────────────\n\nexport { IconCircle, CloseButton, ChainRow, ChainChip, AssetRow, SearchInput, Chip, FilterGroupBar }\nexport type { Chain, Asset, BlockchainAssetSelectorProps, FilterGroupItem }\n\nexport default function BlockchainAssetSelector ({\n chains, assets, onSelect, onClose, defaultChain, defaultTab, filterGroups,\n}: BlockchainAssetSelectorProps) {\n const [activeTab, setActiveTab] = React.useState<'crypto' | 'stock'>(defaultTab ?? 'crypto')\n const [query, setQuery] = React.useState('')\n const [selectedFilter, setSelectedFilter] = React.useState('all')\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 const resolvedGroups = filterGroups ?? DEFAULT_FILTER_GROUPS\n\n // Only show chains that have at least one asset in the active tab\n const visibleChains = chains.filter(\n (c) => (assets[c.id] ?? []).some((a) => a.category === activeTab)\n )\n\n const [selectedChain, setSelectedChain] = React.useState<Chain>(() => {\n const preferred = chains.find((c) => c.id === defaultChain)\n if (preferred && (assets[preferred.id] ?? []).some((a) => a.category === (defaultTab ?? 'crypto'))) {\n return preferred\n }\n return visibleChains[0] ?? chains[0]\n })\n\n const chainAssets = (assets[selectedChain.id] ?? []).filter((a) => a.category === activeTab)\n\n const filtered = chainAssets\n .filter((a) => selectedFilter === 'all' || (a.tags?.includes(selectedFilter) ?? false))\n .filter((a) =>\n a.symbol.toLowerCase().includes(query.toLowerCase()) ||\n a.name.toLowerCase().includes(query.toLowerCase())\n )\n .sort((a, b) => parseUsd(b.balanceUsd) - parseUsd(a.balanceUsd))\n\n React.useEffect(() => {\n setQuery('')\n setSelectedFilter('all')\n if (chainListRef.current) chainListRef.current.scrollLeft = 0\n const stillValid = visibleChains.find((c) => c.id === selectedChain.id)\n if (!stillValid && visibleChains.length > 0) {\n setSelectedChain(visibleChains[0])\n }\n }, [activeTab])\n\n const handleChainSelect = React.useCallback((chain: Chain) => {\n setSelectedChain(chain)\n setQuery('')\n setSelectedFilter('all')\n searchRef.current?.focus()\n }, [])\n\n const handleTabChange = React.useCallback((tab: 'crypto' | 'stock') => {\n setActiveTab(tab)\n }, [])\n\n React.useEffect(() => {\n const onKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose() }\n window.addEventListener('keydown', onKey)\n return () => window.removeEventListener('keydown', onKey)\n }, [onClose])\n\n React.useEffect(() => { searchRef.current?.focus() }, [])\n\n const handleChainKeyDown = (e: React.KeyboardEvent, chain: Chain, idx: number) => {\n if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); handleChainSelect(chain) }\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 }\n\n const handleAssetKeyDown = (e: React.KeyboardEvent, asset: Asset, idx: number) => {\n if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); onSelect(selectedChain, asset) }\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 }\n\n const sharedSearchAssets = (\n <SearchAndAssets\n query={query}\n setQuery={setQuery}\n searchRef={searchRef}\n assetListRef={assetListRef}\n filtered={filtered}\n isMobile={isMobile}\n onSelect={(asset) => onSelect(selectedChain, asset)}\n handleAssetKeyDown={handleAssetKeyDown}\n activeTab={activeTab}\n onTabChange={handleTabChange}\n visibleChains={visibleChains}\n filterGroups={resolvedGroups}\n selectedFilter={selectedFilter}\n onFilterChange={setSelectedFilter}\n />\n )\n\n // ── Mobile: Action Sheet ───────────────────────────────────────────────────\n if (isMobile) {\n return (\n <motion.div\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={onClose}\n data-slot='backdrop'\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='Seletor de Blockchains e Ativos'\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-slot='sheet'\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-[0_10px_30px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_22%,transparent)]',\n 'max-h-[88vh]',\n ].join(' ')}\n >\n {/* Drag handle */}\n <div\n data-slot='drag-handle'\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-slot='sheet-header'\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 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 Seletor de Blockchains e Ativos\n </span>\n <CloseButton onClick={onClose} />\n </div>\n\n {/* Chain chips section */}\n <div\n data-slot='chain-section'\n data-test-id='chain-section'\n className='flex-shrink-0 pb-[var(--deframe-widget-size-padding-y-sm)].5'\n >\n <div 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 Redes\n </div>\n <div\n ref={chainListRef}\n role='listbox'\n aria-label='Redes'\n data-slot='chain-chip-list'\n data-test-id='chain-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 {visibleChains.map((chain) => (\n <ChainChip\n key={chain.id}\n chain={chain}\n selected={selectedChain.id === chain.id}\n onClick={() => handleChainSelect(chain)}\n />\n ))}\n </div>\n </div>\n\n {/* Divider */}\n <div className='h-px bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0' />\n\n {/* Body */}\n <div\n data-slot='sheet-body'\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 initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n onClick={onClose}\n data-slot='backdrop'\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='Seletor de Blockchains e Ativos'\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-slot='modal'\n data-test-id='modal'\n className={[\n 'w-[min(680px,calc(100vw-32px))]',\n 'max-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-[0_20px_50px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_28%,transparent)]',\n 'flex flex-col overflow-hidden',\n ].join(' ')}\n >\n {/* Header */}\n <div\n data-slot='modal-header'\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 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 Seletor de Blockchains e Ativos\n </span>\n <CloseButton onClick={onClose} />\n </div>\n\n {/* Body */}\n <div\n data-slot='modal-body'\n data-test-id='modal-body'\n className='flex flex-1 overflow-hidden'\n >\n {/* Left — Chains */}\n <div\n data-slot='chain-sidebar'\n data-test-id='chain-sidebar'\n className={[\n 'w-[210px] flex-shrink-0',\n 'border-r border-[color:var(--deframe-widget-color-border-secondary)]',\n 'bg-[var(--deframe-widget-color-bg-secondary)]',\n 'flex flex-col overflow-hidden',\n ].join(' ')}\n >\n <div\n data-slot='chain-sidebar-label'\n data-test-id='chain-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 Redes\n </div>\n <div\n ref={chainListRef}\n role='listbox'\n aria-label='Redes'\n data-slot='chain-list'\n data-test-id='chain-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 {visibleChains.map((chain, i) => (\n <ChainRow\n key={chain.id}\n chain={chain}\n selected={selectedChain.id === chain.id}\n onClick={() => handleChainSelect(chain)}\n onKeyDown={(e) => handleChainKeyDown(e, chain, i)}\n index={i}\n />\n ))}\n </div>\n </div>\n\n {/* Right — Assets */}\n <div\n data-slot='asset-panel'\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}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { IconCircle } from '../blockchain-asset-selector/IconCircle'\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type AssetTrendDirection = 'up' | 'down' | 'neutral'\n\nexport interface AssetFilterOption {\n id: string\n label: string\n}\n\nexport interface AssetListProps extends React.ComponentProps<'div'> {}\n\nexport interface AssetListHeaderProps extends React.ComponentProps<'div'> {\n /** Optional right-side action slot (e.g. icon button) */\n action?: React.ReactNode\n}\n\nexport interface AssetListFilterProps {\n /** Filter options — e.g. [{ id: 'all', label: 'Todos' }, ...] */\n filters: AssetFilterOption[]\n /** Currently selected filter id */\n selected: string\n /** Called when a filter pill is clicked */\n onSelect: (id: string) => void\n className?: string\n}\n\nexport interface AssetListColumnsProps extends React.ComponentProps<'div'> {\n /** Override the three column labels. Defaults to ['ATIVO', 'TENDÊNCIA', 'SALDO'] */\n labels?: [string, string, string]\n}\n\nexport interface AssetTrendBadgeProps extends React.ComponentProps<'span'> {\n direction: AssetTrendDirection\n /** Formatted value shown on the badge, e.g. \"+18.2%\" */\n value: string\n}\n\nexport interface AssetListItemProps extends React.ComponentProps<'div'> {\n /** Icon info for the asset */\n asset: { name: string; color: string; iconUrl?: string }\n /** Asset display name, e.g. \"Bitcoin\" */\n name: string\n /** Ticker symbol, e.g. \"BTC\" */\n symbol: string\n /** Trend direction */\n trendDirection: AssetTrendDirection\n /** Formatted trend value, e.g. \"+18.2%\" */\n trendValue: string\n /** Formatted balance with symbol, e.g. \"0.03 BTC\" */\n balance: string\n /** Formatted USD balance, e.g. \"$2,145.00\" */\n balanceUsd: string\n}\n\n// ─── AssetList (root panel) ───────────────────────────────────────────────────\n\n/**\n * Root container for the \"Seus ativos\" panel.\n *\n * Compose with sub-components:\n * ```tsx\n * <AssetList>\n * <AssetListHeader action={<HistoryButton />}>Seus ativos</AssetListHeader>\n * <AssetListFilter filters={FILTERS} selected={tab} onSelect={setTab} />\n * <AssetListColumns />\n * <AssetListItem asset={btc} name=\"Bitcoin\" symbol=\"BTC\" ... />\n * </AssetList>\n * ```\n */\nexport function AssetList ({ className, ...props }: AssetListProps) {\n return (\n <div\n data-slot='asset-list'\n data-test-id='asset-list'\n className={twMerge(\n 'w-full self-start flex flex-col',\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 'overflow-hidden',\n className\n )}\n {...props}\n />\n )\n}\n\n// ─── AssetListHeader ──────────────────────────────────────────────────────────\n\n/**\n * Panel header — renders a title and an optional action slot on the right.\n */\nexport function AssetListHeader ({ action, children, className, ...props }: AssetListHeaderProps) {\n return (\n <div\n data-slot='asset-list-header'\n data-test-id='asset-list-header'\n className={twMerge('flex items-center justify-between px-[var(--deframe-widget-size-padding-x-md)] pt-[var(--deframe-widget-size-padding-y-md)] pb-[var(--deframe-widget-size-padding-y-sm)]', className)}\n {...props}\n >\n <h3 className='text-[color:var(--deframe-widget-color-text-primary)] text-[15px] [font-weight:var(--deframe-widget-font-weight-semibold)] font-[var(--deframe-widget-font-family)] leading-[1.3]'>\n {children}\n </h3>\n {action != null && (\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)] flex-shrink-0'>{action}</div>\n )}\n </div>\n )\n}\n\n// ─── AssetListFilter ──────────────────────────────────────────────────────────\n\n/**\n * Horizontal scrollable pill filter — e.g. \"Todos | Criptomoedas | Ações\".\n *\n * Active pill uses brand-dim background and border; inactive is transparent.\n */\nexport function AssetListFilter ({ filters, selected, onSelect, className }: AssetListFilterProps) {\n return (\n <div\n data-slot='asset-list-filter'\n data-test-id='asset-list-filter'\n className={twMerge(\n 'flex items-center gap-[var(--deframe-widget-size-gap-sm)] px-[var(--deframe-widget-size-padding-x-md)] pb-[var(--deframe-widget-size-padding-y-sm)]',\n 'overflow-x-auto',\n className\n )}\n style={{ scrollbarWidth: 'none' }}\n >\n {filters.map((filter) => {\n const isSelected = filter.id === selected\n return (\n <button\n key={filter.id}\n type='button'\n data-slot='asset-list-filter-pill'\n data-test-id='asset-list-filter-pill'\n onClick={() => onSelect(filter.id)}\n className={twMerge(\n 'inline-flex items-center px-[var(--deframe-widget-size-padding-x-sm)] py-[5px]',\n 'rounded-[var(--deframe-widget-size-radius-full)] border',\n 'text-[12px] [font-weight:var(--deframe-widget-font-weight-medium)] leading-[1.4]',\n 'font-[var(--deframe-widget-font-family)]',\n 'cursor-pointer whitespace-nowrap flex-shrink-0',\n 'outline-none transition-all duration-150',\n isSelected\n ? 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]'\n : 'bg-transparent border-[color:var(--deframe-widget-color-border-secondary)] text-[color:var(--deframe-widget-color-text-secondary)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]'\n )}\n >\n {filter.label}\n </button>\n )\n })}\n </div>\n )\n}\n\n// ─── AssetListColumns ─────────────────────────────────────────────────────────\n\n/**\n * Column header row for the asset table.\n * Default labels: ATIVO | TENDÊNCIA | SALDO\n */\nexport function AssetListColumns ({\n labels = ['ATIVO', 'TENDÊNCIA', 'SALDO'],\n className,\n ...props\n}: AssetListColumnsProps) {\n return (\n <div\n data-slot='asset-list-columns'\n data-test-id='asset-list-columns'\n className={twMerge(\n 'grid grid-cols-[1fr_auto_auto] gap-x-[var(--deframe-widget-size-gap-md)]',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[var(--deframe-widget-size-padding-y-sm)]',\n 'border-t border-[color:var(--deframe-widget-color-border-secondary)]',\n className\n )}\n {...props}\n >\n <span className='text-[10px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.08em] text-[color:var(--deframe-widget-color-text-tertiary)] leading-[1.4]'>\n {labels[0]}\n </span>\n <span className='text-[10px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.08em] text-[color:var(--deframe-widget-color-text-tertiary)] leading-[1.4] text-center'>\n {labels[1]}\n </span>\n <span className='text-[10px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.08em] text-[color:var(--deframe-widget-color-text-tertiary)] leading-[1.4] text-right'>\n {labels[2]}\n </span>\n </div>\n )\n}\n\n// ─── AssetTrendBadge ──────────────────────────────────────────────────────────\n\n/**\n * Compact trend badge pill with directional arrow.\n *\n * | direction | style |\n * |-----------|-----------------|\n * | `up` | green bg + text |\n * | `down` | red bg + text |\n * | `neutral` | muted bg + text |\n */\nexport function AssetTrendBadge ({ direction, value, className, ...props }: AssetTrendBadgeProps) {\n const directionClasses: Record<AssetTrendDirection, string> = {\n up: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)] text-[color:var(--deframe-widget-color-brand-primary)]',\n down: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)] text-[color:var(--deframe-widget-color-state-error)]',\n neutral: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-tertiary)_84%,transparent)] border-[color:var(--deframe-widget-color-border-secondary)] text-[color:var(--deframe-widget-color-text-tertiary)]',\n }\n\n const arrowIcons: Record<AssetTrendDirection, React.ReactNode> = {\n up: (\n <svg width='8' height='8' viewBox='0 0 10 10' fill='none' aria-hidden='true'>\n <path d='M5 1.5L9 7H1L5 1.5Z' fill='currentColor' />\n </svg>\n ),\n down: (\n <svg width='8' height='8' viewBox='0 0 10 10' fill='none' aria-hidden='true'>\n <path d='M5 8.5L1 3H9L5 8.5Z' fill='currentColor' />\n </svg>\n ),\n neutral: (\n <svg width='9' height='9' viewBox='0 0 12 12' fill='none' aria-hidden='true'>\n <path d='M2 6H10' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' />\n </svg>\n ),\n }\n\n return (\n <span\n data-slot='asset-trend-badge'\n data-test-id='asset-trend-badge'\n className={twMerge(\n 'inline-flex items-center gap-[3px]',\n 'px-[7px] py-[3px]',\n 'rounded-[var(--deframe-widget-size-radius-full)] border',\n 'text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] leading-[1.4]',\n 'font-[var(--deframe-widget-font-family)]',\n 'whitespace-nowrap',\n directionClasses[direction],\n className\n )}\n {...props}\n >\n {arrowIcons[direction]}\n {value}\n </span>\n )\n}\n\n// ─── AssetListItem ────────────────────────────────────────────────────────────\n\n/**\n * Single asset row — icon + name/symbol | trend badge | balance.\n *\n * Uses a three-column grid matching `AssetListColumns` layout.\n */\nexport function AssetListItem ({\n asset,\n name,\n symbol,\n trendDirection,\n trendValue,\n balance,\n balanceUsd,\n className,\n ...props\n}: AssetListItemProps) {\n return (\n <div\n data-slot='asset-list-item'\n data-test-id='asset-list-item'\n className={twMerge(\n 'grid grid-cols-[1fr_auto_auto] gap-x-[var(--deframe-widget-size-gap-md)] items-center',\n 'px-[var(--deframe-widget-size-padding-x-md)] py-[11px]',\n 'border-t border-[color:var(--deframe-widget-color-border-secondary)]',\n 'transition-colors duration-150',\n 'hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]',\n className\n )}\n {...props}\n >\n {/* Column 1: asset icon + name/symbol */}\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)] min-w-0'>\n <IconCircle item={asset} size={36} />\n <div className='flex flex-col min-w-0'>\n <span className='text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] leading-[1.3] font-[var(--deframe-widget-font-family)] truncate'>\n {name}\n </span>\n <span className='text-[11px] text-[color:var(--deframe-widget-color-text-secondary)] leading-[1.4]'>\n {symbol}\n </span>\n </div>\n </div>\n\n {/* Column 2: trend badge */}\n <div className='flex justify-center'>\n <AssetTrendBadge direction={trendDirection} value={trendValue} />\n </div>\n\n {/* Column 3: balance */}\n <div className='flex flex-col items-end text-right'>\n <span className='text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] leading-[1.3] font-[var(--deframe-widget-font-family)]'>\n {balanceUsd}\n </span>\n <span className='text-[11px] text-[color:var(--deframe-widget-color-text-secondary)] leading-[1.4]'>\n {balance}\n </span>\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { IconCircle } from '../blockchain-asset-selector/IconCircle'\nimport { PrimaryButton, SecondaryButton } from '../buttons'\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type StrategyRisk = 'low' | 'medium' | 'high'\n\nexport interface StrategyListProps extends React.ComponentProps<'div'> {}\n\nexport interface StrategyListHeaderProps extends React.ComponentProps<'div'> {\n /** Optional back-navigation handler — renders a back chevron button */\n onBack?: () => void\n /** Subtitle shown below the main title */\n subtitle?: string\n}\n\nexport interface StrategyRiskBadgeProps extends React.ComponentProps<'span'> {\n risk: StrategyRisk\n /** Override the default label for this risk level */\n label?: string\n}\n\nexport interface StrategyListItemProps extends React.ComponentProps<'div'> {\n /** Strategy icon info passed to IconCircle */\n strategy: { name: string; color: string; iconUrl?: string }\n /** Strategy display name, e.g. \"Caixinha Dólar\" */\n name: string\n /** Network or sub-label, e.g. \"Ethereum\" */\n network?: string\n /** Formatted yield value, e.g. \"6.3%\" */\n rendimento: string\n /** Risk level shown as a badge */\n risk?: StrategyRisk\n /** Called when the \"Investir\" button is clicked */\n onInvestir?: () => void\n /** Called when the \"Sacar\" button is clicked */\n onSacar?: () => void\n /** Whether to show the \"Sacar\" button (default: true) */\n showSacar?: boolean\n}\n\n// ─── Risk badge config ────────────────────────────────────────────────────────\n\nconst riskConfig: Record<StrategyRisk, { label: string; wrapperClass: string; dotClass: string; labelClass: string }> = {\n low: {\n label: 'Baixo',\n wrapperClass: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)]',\n dotClass: 'bg-[var(--deframe-widget-color-brand-primary)]',\n labelClass: 'text-[color:var(--deframe-widget-color-brand-primary)]',\n },\n medium: {\n label: 'Médio',\n wrapperClass: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_32%,transparent)]',\n dotClass: 'bg-[var(--deframe-widget-color-state-warning)]',\n labelClass: 'text-[color:var(--deframe-widget-color-state-warning)]',\n },\n high: {\n label: 'Alto',\n wrapperClass: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)]',\n dotClass: 'bg-[var(--deframe-widget-color-state-error)]',\n labelClass: 'text-[color:var(--deframe-widget-color-state-error)]',\n },\n}\n\n// ─── StrategyList (root) ──────────────────────────────────────────────────────\n\n/**\n * Root container for the \"Caixinhas\" strategy list.\n *\n * Compose with sub-components:\n * ```tsx\n * <StrategyList>\n * <StrategyListHeader subtitle=\"Escolha onde investir\" onBack={handleBack}>\n * Caixinhas\n * </StrategyListHeader>\n * <StrategyListItem\n * strategy={dollarIcon}\n * name=\"Caixinha Dólar\"\n * network=\"Ethereum\"\n * rendimento=\"6.3%\"\n * risk=\"low\"\n * onInvestir={handleInvestir}\n * />\n * </StrategyList>\n * ```\n */\nexport function StrategyList ({ className, ...props }: StrategyListProps) {\n return (\n <div\n data-slot='strategy-list'\n data-test-id='strategy-list'\n className={twMerge('w-full self-start flex flex-col gap-[var(--deframe-widget-size-gap-sm)]', className)}\n {...props}\n />\n )\n}\n\n// ─── StrategyListHeader ───────────────────────────────────────────────────────\n\n/**\n * Header section — title, optional subtitle, and optional back-chevron button.\n */\nexport function StrategyListHeader ({\n onBack,\n subtitle,\n children,\n className,\n ...props\n}: StrategyListHeaderProps) {\n return (\n <div\n data-slot='strategy-list-header'\n data-test-id='strategy-list-header'\n className={twMerge('w-full flex flex-col gap-[var(--deframe-widget-size-gap-xs)]', className)}\n {...props}\n >\n <div className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n {onBack != null && (\n <button\n type='button'\n onClick={onBack}\n aria-label='Voltar'\n className={twMerge(\n 'flex items-center justify-center',\n 'w-8 h-8',\n 'rounded-[var(--deframe-widget-size-radius-sm)]',\n 'border border-[color:var(--deframe-widget-color-border-secondary)]',\n 'text-[color:var(--deframe-widget-color-text-secondary)]',\n 'hover:text-[color:var(--deframe-widget-color-text-primary)] hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]',\n 'transition-all duration-150',\n 'cursor-pointer flex-shrink-0 outline-none'\n )}\n >\n <svg width='16' height='16' viewBox='0 0 16 16' fill='none' aria-hidden='true'>\n <path d='M10 12L6 8L10 4' stroke='currentColor' strokeWidth='1.5' strokeLinecap='round' strokeLinejoin='round' />\n </svg>\n </button>\n )}\n <h2 className='text-[color:var(--deframe-widget-color-text-primary)] text-[17px] [font-weight:var(--deframe-widget-font-weight-semibold)] font-[var(--deframe-widget-font-family)] leading-[1.3]'>\n {children}\n </h2>\n </div>\n {subtitle != null && (\n <p className='text-[color:var(--deframe-widget-color-text-secondary)] text-[13px] font-[var(--deframe-widget-font-family)] leading-[1.5]'>\n {subtitle}\n </p>\n )}\n </div>\n )\n}\n\n// ─── StrategyRiskBadge ────────────────────────────────────────────────────────\n\n/**\n * Risk level badge pill.\n *\n * | risk | colour |\n * |----------|--------|\n * | `low` | green |\n * | `medium` | amber |\n * | `high` | red |\n */\nexport function StrategyRiskBadge ({ risk, label, className, ...props }: StrategyRiskBadgeProps) {\n const config = riskConfig[risk]\n const displayLabel = label ?? config.label\n\n return (\n <span\n data-slot='strategy-risk-badge'\n data-test-id='strategy-risk-badge'\n className={twMerge(\n 'inline-flex items-center gap-[5px]',\n 'py-[3px] pr-[10px] pl-[7px]',\n 'rounded-[var(--deframe-widget-size-radius-full)] border',\n config.wrapperClass,\n className\n )}\n {...props}\n >\n <span\n className={twMerge('w-[6px] h-[6px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0 inline-block', config.dotClass)}\n />\n <span\n className={twMerge(\n 'text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] font-[var(--deframe-widget-font-family)]',\n config.labelClass\n )}\n >\n {displayLabel}\n </span>\n </span>\n )\n}\n\n// ─── StrategyListItem ─────────────────────────────────────────────────────────\n\n/**\n * Single strategy card — icon + name + network, rendimento %, risk badge,\n * and \"Investir\" / \"Sacar\" action buttons.\n */\nexport function StrategyListItem ({\n strategy,\n name,\n network,\n rendimento,\n risk,\n onInvestir,\n onSacar,\n showSacar = true,\n className,\n ...props\n}: StrategyListItemProps) {\n return (\n <div\n data-slot='strategy-list-item'\n data-test-id='strategy-list-item'\n className={twMerge(\n 'w-full flex flex-col 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-md)]',\n className\n )}\n {...props}\n >\n {/* Top row: icon + name/network + optional risk badge */}\n <div className='w-full flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <IconCircle item={strategy} size={40} />\n <div className='flex flex-col flex-1 min-w-0'>\n <span className='text-[14px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-[color:var(--deframe-widget-color-text-primary)] leading-[1.3] font-[var(--deframe-widget-font-family)] truncate'>\n {name}\n </span>\n {network != null && (\n <span className='text-[12px] text-[color:var(--deframe-widget-color-text-secondary)] leading-[1.4]'>\n {network}\n </span>\n )}\n </div>\n {risk != null && <StrategyRiskBadge risk={risk} />}\n </div>\n\n {/* Rendimento row */}\n <div className='w-full flex items-baseline gap-[var(--deframe-widget-size-gap-sm)]'>\n <span className='text-[11px] [font-weight:var(--deframe-widget-font-weight-medium)] uppercase tracking-[0.08em] text-[color:var(--deframe-widget-color-text-tertiary)]'>\n Rendimento\n </span>\n <span className='text-[22px] [font-weight:var(--deframe-widget-font-weight-bold)] text-[color:var(--deframe-widget-color-brand-primary)] font-[var(--deframe-widget-font-family)] leading-[1.1]'>\n {rendimento}\n </span>\n </div>\n\n {/* Action buttons */}\n <div className='w-full flex items-center gap-[var(--deframe-widget-size-gap-sm)]'>\n <PrimaryButton\n className='h-9 text-[13px] flex-1'\n onClick={onInvestir}\n >\n Investir\n </PrimaryButton>\n {showSacar && (\n <SecondaryButton\n className='h-9 text-[13px] flex-1'\n onClick={onSacar}\n >\n Sacar\n </SecondaryButton>\n )}\n </div>\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { IconCircle } from '../blockchain-asset-selector/IconCircle'\n\n// ── TokenIcon ──────────────────────────────────────────────────────────────────\n\nexport interface TokenIconProps {\n token: { name: string; color: string; iconUrl?: string }\n size?: number\n badge?: { name: string; color: string; iconUrl?: string }\n badgeSize?: number\n className?: string\n}\n\n/**\n * Token icon with an optional network badge overlaid at the bottom-right.\n * Wraps IconCircle — falls back to colored circle with initials when no iconUrl.\n */\nexport function TokenIcon ({ token, size = 40, badge, badgeSize = 18, className }: TokenIconProps) {\n return (\n <div\n data-test-id='token-icon'\n data-slot='token-icon'\n className={twMerge('relative flex-shrink-0', className)}\n style={{ width: size, height: size }}\n >\n <IconCircle\n data-test-id='token-icon-circle'\n data-slot='token-icon-circle'\n item={token}\n size={size}\n />\n {badge && (\n <div\n data-test-id='token-icon-badge'\n data-slot='token-icon-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\n data-test-id='token-icon-badge-circle'\n data-slot='token-icon-badge-circle'\n item={badge}\n size={badgeSize}\n />\n </div>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\n// ── PercentageChips ────────────────────────────────────────────────────────────\n\nexport interface PercentageChipsProps {\n /** Percentage values — last item uses maxLabel. Default: [25, 50, 75, 100] */\n options?: number[]\n /** Label shown for the last (100 %) chip. Default: 'Máx.' */\n maxLabel?: string\n /** Currently active percentage (null = none selected) */\n selected?: number | null\n onSelect: (pct: number) => void\n}\n\n/**\n * Row of percentage shortcut pills for the \"from\" token input.\n * Designed to be revealed via Framer Motion AnimatePresence in SwapPanel.\n */\nexport function PercentageChips ({\n options = [25, 50, 75, 100],\n maxLabel = 'Máx.',\n selected = null,\n onSelect,\n}: PercentageChipsProps) {\n return (\n <div\n data-test-id='percentage-chips'\n data-slot='percentage-chips'\n className='flex gap-[6px] items-center'\n >\n {options.map((pct, i) => {\n const isLast = i === options.length - 1\n const isActive = pct === selected\n const label = isLast ? maxLabel : `${pct}%`\n\n return (\n <ChipPill\n key={pct}\n label={label}\n active={isActive}\n onClick={() => onSelect(pct)}\n />\n )\n })}\n </div>\n )\n}\n\n// ── Internal pill ─────────────────────────────────────────────────────────────\n\ninterface ChipPillProps {\n label: string\n active: boolean\n onClick: () => void\n}\n\nfunction ChipPill ({ label, active, onClick }: ChipPillProps) {\n const baseClasses = [\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 ].join(' ')\n\n const stateClasses = {\n active: [\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 ].join(' '),\n default: [\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 ].join(' '),\n } as const\n\n const chipClasses = twMerge(baseClasses, stateClasses[active ? 'active' : 'default'])\n\n return (\n <button\n data-test-id='chip-pill'\n data-slot='chip-pill'\n onClick={onClick}\n className={chipClasses}\n >\n <span\n data-test-id='chip-pill-label'\n data-slot='chip-pill-label'\n >\n {label}\n </span>\n </button>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\n// ── InlineNotification ─────────────────────────────────────────────────────────\n\nexport type NotifVariant = 'info' | 'warning' | 'error' | 'success'\n\nexport interface InlineNotificationProps {\n variant: NotifVariant\n message: string\n action?: { label: string; onClick: () => void }\n onDismiss?: () => void\n}\n\n// Tailwind class strings for wrapper bg/border per variant\nconst variantClasses: Record<NotifVariant, { wrapper: string }> = {\n error: {\n wrapper: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-error)_32%,transparent)]',\n },\n warning: {\n wrapper: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-warning)_32%,transparent)]',\n },\n info: {\n wrapper: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-state-info)_16%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-state-info)_32%,transparent)]',\n },\n success: {\n wrapper: 'bg-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_12%,transparent)] border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)]',\n },\n}\n\n// Dynamic hex colors for the accent bar, dot, and action button (kept as style)\nconst variantData: Record<NotifVariant, { accentClass: string; actionClass: string }> = {\n error: {\n accentClass: 'bg-[var(--deframe-widget-color-state-error)]',\n actionClass: 'text-[color:var(--deframe-widget-color-state-error)]'\n },\n warning: {\n accentClass: 'bg-[var(--deframe-widget-color-state-warning)]',\n actionClass: 'text-[color:var(--deframe-widget-color-state-warning)]'\n },\n info: {\n accentClass: 'bg-[var(--deframe-widget-color-state-info)]',\n actionClass: 'text-[color:var(--deframe-widget-color-state-info)]'\n },\n success: {\n accentClass: 'bg-[var(--deframe-widget-color-brand-primary)]',\n actionClass: 'text-[color:var(--deframe-widget-color-brand-primary)]'\n },\n}\n\n/**\n * Compact inline message bar with a 3 px left accent stripe.\n * Use inside TokenInputCard or any card surface — not a floating toast.\n */\nexport function InlineNotification ({\n variant,\n message,\n action,\n onDismiss,\n}: InlineNotificationProps) {\n const { wrapper } = variantClasses[variant]\n const { accentClass, actionClass } = variantData[variant]\n\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 wrapper\n )\n\n return (\n <div\n data-test-id='inline-notification'\n data-slot='inline-notification'\n role='alert'\n className={wrapperClasses}\n >\n {/* Left accent bar — data-driven color, kept as style */}\n <div\n data-test-id='inline-notification-accent'\n data-slot='inline-notification-accent'\n className={twMerge(\n 'absolute left-0 top-0 bottom-0 w-[3px] rounded-[var(--deframe-widget-size-radius-sm)_0_0_var(--deframe-widget-size-radius-sm)]',\n accentClass\n )}\n />\n\n {/* Dot indicator — data-driven color, kept as style */}\n <div\n data-test-id='inline-notification-dot'\n data-slot='inline-notification-dot'\n className={twMerge('w-[6px] h-[6px] rounded-[var(--deframe-widget-size-radius-full)] flex-shrink-0', accentClass)}\n />\n\n {/* Message */}\n <span\n data-test-id='inline-notification-message'\n data-slot='inline-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 link — data-driven color for actionColor, kept as style */}\n {action && (\n <button\n data-test-id='inline-notification-action'\n data-slot='inline-notification-action'\n onClick={() => action.onClick()}\n className={twMerge(\n 'flex-shrink-0 bg-none border-none cursor-pointer text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] py-[var(--deframe-widget-size-padding-y-none)] px-[var(--deframe-widget-size-padding-x-xs)] outline-none font-[var(--deframe-widget-font-family)] whitespace-nowrap',\n actionClass\n )}\n >\n {action.label} →\n </button>\n )}\n\n {/* Dismiss button */}\n {onDismiss && (\n <button\n data-test-id='inline-notification-dismiss'\n data-slot='inline-notification-dismiss'\n onClick={onDismiss}\n aria-label='Dismiss notification'\n className='flex-shrink-0 bg-none border-none cursor-pointer text-[color:var(--deframe-widget-color-text-tertiary)] py-[var(--deframe-widget-size-padding-y-none)] px-[var(--deframe-widget-size-padding-x-none)].5 outline-none flex items-center'\n >\n <svg\n width='12'\n height='12'\n viewBox='0 0 24 24'\n fill='none'\n stroke='currentColor'\n strokeWidth='2.5'\n strokeLinecap='round'\n aria-hidden='true'\n >\n <line x1='18' y1='6' x2='6' y2='18' />\n <line x1='6' y1='6' x2='18' y2='18' />\n </svg>\n </button>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TokenIcon } from './TokenIcon'\n\n// ── TokenSelector ──────────────────────────────────────────────────────────────\n\nexport interface TokenSelectorToken {\n name: string\n symbol: string\n color: string\n iconUrl?: string\n network: string\n networkColor?: string\n networkIconUrl?: string\n}\n\nexport interface TokenSelectorProps {\n token: TokenSelectorToken\n onClick?: () => void\n disabled?: boolean\n}\n\n/**\n * Clickable area showing the selected token — icon, name, network label, and a\n * downward chevron. Occupies the left half of a TokenInputCard.\n */\nexport function TokenSelector ({ token, onClick, disabled = false }: TokenSelectorProps) {\n const badge = token.network\n ? {\n name: token.network,\n color: token.networkColor ?? 'var(--deframe-widget-color-brand-secondary)',\n iconUrl: token.networkIconUrl,\n }\n : undefined\n\n const baseClasses = [\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-secondary)]',\n 'border-none',\n 'outline-none',\n 'transition-[background] duration-150',\n 'flex-shrink-0',\n disabled ? 'cursor-default' : 'cursor-pointer hover:bg-[color:color-mix(in_srgb,var(--deframe-widget-color-bg-secondary)_72%,transparent)]',\n ].join(' ')\n\n return (\n <button\n data-test-id='token-selector'\n data-slot='token-selector'\n onClick={!disabled ? onClick : undefined}\n disabled={disabled}\n aria-label={`Select token — currently ${token.symbol} on ${token.network}`}\n className={twMerge(baseClasses)}\n >\n <TokenIcon\n data-test-id='token-selector-icon'\n data-slot='token-selector-icon'\n token={token}\n size={38}\n badge={badge}\n badgeSize={16}\n />\n\n <div\n data-test-id='token-selector-info'\n data-slot='token-selector-info'\n className='flex flex-col items-start min-w-0'\n >\n <span\n data-test-id='token-selector-symbol'\n data-slot='token-selector-symbol'\n className={[\n 'text-[16px] [font-weight:var(--deframe-widget-font-weight-semibold)] leading-[1.2]',\n 'font-[var(--deframe-widget-font-family)]',\n disabled ? 'text-[color:var(--deframe-widget-color-text-secondary)]' : 'text-[color:var(--deframe-widget-color-text-primary)]',\n ].join(' ')}\n >\n {token.symbol}\n </span>\n <span\n data-test-id='token-selector-network'\n data-slot='token-selector-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 {token.network}\n </span>\n </div>\n\n {/* Chevron ↓ */}\n {!disabled && (\n <svg\n data-test-id='token-selector-chevron'\n data-slot='token-selector-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 </button>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\n\n// ── AmountInput ────────────────────────────────────────────────────────────────\n\nexport interface AmountInputProps {\n value: string\n onChange: (v: string) => void\n /** e.g. '≈ $0.00' — shown below the amount in muted text */\n conversionUsd?: string\n /** \"to\" field — shows a computed amount with no editing */\n readOnly?: boolean\n disabled?: boolean\n}\n\n/**\n * Large amount input occupying the right half of a TokenInputCard.\n * - 36 px semibold number, right-aligned\n * - Muted colour when value is empty / '0', primary otherwise\n * - USD conversion label appears below when provided\n * - inputMode=\"decimal\" for mobile numeric pad\n */\nexport function AmountInput ({\n value,\n onChange,\n conversionUsd,\n readOnly = false,\n disabled = false,\n}: AmountInputProps) {\n const isEmpty = !value || value === '0' || value === ''\n\n const inputClasses = [\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 isEmpty ? 'text-[color:var(--deframe-widget-color-text-tertiary)]' : 'text-[color:var(--deframe-widget-color-text-primary)]',\n readOnly || disabled ? 'cursor-default' : 'cursor-text',\n ].join(' ')\n\n return (\n <div\n data-test-id='amount-input-wrapper'\n data-slot='amount-input-wrapper'\n className='flex flex-col items-end flex-1 min-w-0'\n >\n <input\n data-test-id='amount-input'\n data-slot='amount-input'\n type='text'\n inputMode='decimal'\n value={value || ''}\n readOnly={readOnly}\n disabled={disabled}\n placeholder='0'\n onChange={(e) => {\n const v = e.target.value\n // Allow only numbers and a single decimal point\n if (/^[0-9]*\\.?[0-9]*$/.test(v) || v === '') {\n onChange(v)\n }\n }}\n className={twMerge(inputClasses)}\n />\n {conversionUsd && (\n <span\n data-test-id='amount-input-conversion'\n data-slot='amount-input-conversion'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] mt-[var(--deframe-widget-size-gap-none)].5 font-[var(--deframe-widget-font-family)]'\n >\n {conversionUsd}\n </span>\n )}\n </div>\n )\n}\n","import * as React from 'react'\nimport { motion } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\n\n// ── SwapDirectionButton ────────────────────────────────────────────────────────\n\nexport interface SwapDirectionButtonProps {\n onClick?: () => void\n disabled?: boolean\n}\n\n/**\n * The ↓ button placed between the two TokenInputCards.\n * Hovers with a Framer Motion rotate-180 animation to indicate direction swap.\n * Negatively offset by the parent so it visually overlaps both cards.\n */\nexport function SwapDirectionButton ({ onClick, disabled = false }: SwapDirectionButtonProps) {\n // useState kept intentionally — Framer Motion `animate` requires this value\n const [hovered, setHovered] = React.useState(false)\n\n const baseClasses = [\n 'inline-flex items-center justify-center',\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 'outline-none',\n 'flex-shrink-0',\n 'shadow-[0_2px_8px_color-mix(in_srgb,var(--deframe-widget-color-text-primary)_18%,transparent)]',\n disabled ? 'cursor-default text-[color:var(--deframe-widget-color-text-tertiary)]' : 'cursor-pointer text-[color:var(--deframe-widget-color-brand-primary)]',\n ].join(' ')\n\n return (\n <motion.button\n data-test-id='swap-direction-button'\n data-slot='swap-direction-button'\n onClick={!disabled ? onClick : undefined}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n disabled={disabled}\n animate={{ rotate: hovered ? 180 : 0 }}\n transition={{ duration: 0.25, ease: 'easeInOut' }}\n aria-label='Swap direction'\n className={twMerge(baseClasses)}\n >\n <svg\n data-test-id='swap-direction-button-icon'\n data-slot='swap-direction-button-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","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TokenSelector } from './TokenSelector'\nimport { AmountInput } from './AmountInput'\nimport { InlineNotification } from './InlineNotification'\nimport type { TokenSelectorToken } from './TokenSelector'\n\n// ── TokenInputCard ─────────────────────────────────────────────────────────────\n\nexport interface TokenInputCardProps {\n token: TokenSelectorToken\n amount: string\n onAmountChange?: (v: string) => void\n /** e.g. '0' or '41' — shown as \"Saldo: X SYMBOL\" */\n balance?: string\n balanceSymbol?: string\n /** e.g. '≈ $0.00' — forwarded to AmountInput */\n conversionUsd?: string\n /** Opens the BlockchainAssetSelector */\n onTokenSelect?: () => void\n /** True for the \"to\" card — amount is read-only */\n readOnly?: boolean\n error?: 'insufficient_balance' | null\n /** Signals SwapPanel to show/hide PercentageChips */\n onHoverChange?: (hovering: boolean) => void\n /** Optional slot rendered inside the card, below the balance row */\n chipsSlot?: React.ReactNode\n}\n\n/**\n * Full input card: TokenSelector on the left + AmountInput on the right +\n * balance row below. Turns red in the error='insufficient_balance' state and\n * shows an InlineNotification with a \"Adicionar via PIX\" action.\n */\nexport function TokenInputCard ({\n token,\n amount,\n onAmountChange,\n balance,\n balanceSymbol,\n conversionUsd,\n onTokenSelect,\n readOnly = false,\n error = null,\n onHoverChange,\n chipsSlot,\n}: TokenInputCardProps) {\n const hasError = error === 'insufficient_balance'\n\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 hasError\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 return (\n <div\n data-test-id='token-input-card'\n data-slot='token-input-card'\n onMouseEnter={() => onHoverChange?.(true)}\n onMouseLeave={() => onHoverChange?.(false)}\n className={wrapperClasses}\n >\n {/* ── Top row: token selector + amount input ── */}\n <div\n data-test-id='token-input-card-top-row'\n data-slot='token-input-card-top-row'\n className='flex items-center gap-[var(--deframe-widget-size-gap-sm)]'\n >\n <TokenSelector\n data-test-id='token-input-card-selector'\n data-slot='token-input-card-selector'\n token={token}\n onClick={onTokenSelect}\n disabled={!onTokenSelect}\n />\n\n {/* Vertical divider */}\n <div\n data-test-id='token-input-card-divider'\n data-slot='token-input-card-divider'\n className='w-px h-10 bg-[var(--deframe-widget-color-border-secondary)] flex-shrink-0'\n />\n\n <AmountInput\n data-test-id='token-input-card-amount'\n data-slot='token-input-card-amount'\n value={amount}\n onChange={onAmountChange ?? (() => {})}\n conversionUsd={conversionUsd}\n readOnly={readOnly}\n disabled={!onAmountChange && !readOnly}\n />\n </div>\n\n {/* ── Balance row ── */}\n {(balance !== undefined || balanceSymbol) && (\n <div\n data-test-id='token-input-card-balance-row'\n data-slot='token-input-card-balance-row'\n className='flex items-center justify-between mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <span\n data-test-id='token-input-card-balance-label'\n data-slot='token-input-card-balance-label'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-tertiary)] font-[var(--deframe-widget-font-family)]'\n >\n Saldo:{' '}\n <span\n data-test-id='token-input-card-balance-value'\n data-slot='token-input-card-balance-value'\n className={hasError ? 'text-[color:var(--deframe-widget-color-state-error)]' : 'text-[color:var(--deframe-widget-color-text-secondary)]'}\n >\n {balance ?? '0'} {balanceSymbol ?? token.symbol}\n </span>\n </span>\n </div>\n )}\n\n {/* ── Percentage chips slot (inside card, below balance) ── */}\n {chipsSlot && (\n <div\n data-test-id='token-input-card-chips-slot'\n data-slot='token-input-card-chips-slot'\n className='mt-[var(--deframe-widget-size-gap-sm)]'\n >\n {chipsSlot}\n </div>\n )}\n\n {/* ── Error notification ── */}\n {hasError && (\n <div\n data-test-id='token-input-card-error'\n data-slot='token-input-card-error'\n className='mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <InlineNotification\n variant='error'\n message='Saldo insuficiente para realizar a troca.'\n action={{\n label: 'Adicionar via PIX',\n onClick: () => {},\n }}\n />\n </div>\n )}\n </div>\n )\n}\n","// Shared widget token aliases used by stories and a few motion-heavy components.\n\nexport const T = {\n bgModal: 'var(--deframe-widget-color-bg-secondary)',\n bgLeft: 'var(--deframe-widget-color-bg-secondary)',\n input: 'var(--deframe-widget-color-bg-tertiary)',\n border: 'var(--deframe-widget-color-border-secondary)',\n textPrimary: 'var(--deframe-widget-color-text-primary)',\n textSecondary: 'var(--deframe-widget-color-text-secondary)',\n textMuted: 'var(--deframe-widget-color-text-tertiary)',\n green: 'var(--deframe-widget-color-brand-primary)',\n greenDim: 'color-mix(in srgb, var(--deframe-widget-color-brand-primary) 12%, transparent)',\n greenDimBorder: 'color-mix(in srgb, var(--deframe-widget-color-brand-primary) 32%, transparent)',\n radiusModal: 'var(--deframe-widget-size-radius-md)',\n radiusSheet: 'var(--deframe-widget-size-radius-lg)',\n radiusItem: 'var(--deframe-widget-size-radius-sm)',\n radiusAccent: 'var(--deframe-widget-size-radius-xs)',\n radiusFull: 'var(--deframe-widget-size-radius-full)',\n}\n","import * as React from 'react'\nimport { motion } from 'framer-motion'\nimport { T } from '../blockchain-asset-selector/tokens'\n\n// ── Types ──────────────────────────────────────────────────────────────────────\n\nexport type SwapFeedbackVariant = 'loading' | 'success' | 'error'\n\nexport interface SwapFeedbackOverlayProps {\n variant: SwapFeedbackVariant\n /** Override the default title for this variant */\n title?: string\n /** Override the default subtitle for this variant */\n subtitle?: string\n /** Used in Storybook — wraps overlay in a standalone dark container */\n standalone?: boolean\n}\n\n// ── Default copy — update here to change wording across the whole app ──────────\n\nexport const SWAP_FEEDBACK_DEFAULTS: Record<\n SwapFeedbackVariant,\n { title: string; subtitle: string }\n> = {\n loading: {\n title: 'PROCESSANDO TRANSAÇÃO...',\n subtitle: 'Aguarde enquanto sua troca é confirmada.',\n },\n success: {\n title: 'Troca Aprovada!',\n subtitle: 'Seu saldo foi atualizado.',\n },\n error: {\n title: 'Troca Falhou',\n subtitle: 'Tente novamente mais tarde.',\n },\n}\n\n// ── SwapFeedbackOverlay ────────────────────────────────────────────────────────\n\n/**\n * Glass-blur overlay rendered **inside** (`position: absolute`) the SwapPanel\n * container when a feedback state is active.\n *\n * The parent SwapPanel must have `position: relative` — this is already the case.\n *\n * ### Variants\n * | `variant` | Icon | Title style |\n * |-------------|-------------------------------|---------------------|\n * | `loading` | Rotating sync arrows (green) | Uppercase / muted |\n * | `success` | Spring-in green circle + ✓ | Large bold / white |\n * | `error` | Spring-in red circle + ✕ | Large bold / white |\n *\n * ### Usage in SwapPanel (already wired)\n * ```tsx\n * <SwapPanel\n * feedback={{ variant: 'success' }} // uses default copy\n * feedback={{ variant: 'error', title: 'Falhou!', subtitle: 'Tente novamente.' }}\n * />\n * ```\n *\n * ### Standalone (stories / custom screens)\n * ```tsx\n * <SwapFeedbackOverlay variant='success' standalone />\n * ```\n */\nexport function SwapFeedbackOverlay ({\n variant,\n title,\n subtitle,\n standalone = false,\n}: SwapFeedbackOverlayProps) {\n const defaults = SWAP_FEEDBACK_DEFAULTS[variant]\n const resolvedTitle = title ?? defaults.title\n const resolvedSubtitle = subtitle ?? defaults.subtitle\n\n const isLoading = variant === 'loading'\n\n const overlay = (\n <motion.div\n data-test-id='swap-feedback-overlay'\n data-slot='swap-feedback-overlay'\n key='swap-feedback-overlay'\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.2 }}\n style={{\n position: standalone ? 'relative' : 'absolute',\n inset: standalone ? undefined : 0,\n borderRadius: 'inherit',\n backdropFilter: 'blur(12px)',\n WebkitBackdropFilter: 'blur(12px)',\n background: 'color-mix(in srgb, var(--deframe-widget-color-bg-primary) 88%, transparent)',\n zIndex: 10,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 24,\n padding: standalone ? '52px 32px' : '36px 24px',\n fontFamily: 'var(--deframe-widget-font-family)',\n }}\n >\n {/* ── Icon ── */}\n {isLoading && <LoadingIcon />}\n {variant === 'success' && <SuccessIcon />}\n {variant === 'error' && <ErrorIcon />}\n\n {/* ── Copy ── */}\n <div\n data-test-id='swap-feedback-text'\n data-slot='swap-feedback-text'\n style={{\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n gap: 8,\n textAlign: 'center',\n }}\n >\n <span\n data-test-id='swap-feedback-title'\n data-slot='swap-feedback-title'\n style={{\n fontSize: isLoading ? 12 : 22,\n fontWeight: isLoading ? 600 : 700,\n letterSpacing: isLoading ? '0.10em' : undefined,\n textTransform: isLoading ? 'uppercase' : undefined,\n color: isLoading ? T.green : T.textPrimary,\n lineHeight: 1.25,\n }}\n >\n {resolvedTitle}\n </span>\n\n <span\n data-test-id='swap-feedback-subtitle'\n data-slot='swap-feedback-subtitle'\n style={{\n fontSize: 14,\n fontWeight: 400,\n color: T.textSecondary,\n lineHeight: 1.6,\n maxWidth: 260,\n }}\n >\n {resolvedSubtitle}\n </span>\n </div>\n </motion.div>\n )\n\n if (standalone) {\n return (\n <div\n style={{\n width: '100%',\n borderRadius: T.radiusModal,\n overflow: 'hidden',\n border: `1px solid ${T.border}`,\n background: T.bgLeft,\n }}\n >\n {overlay}\n </div>\n )\n }\n\n return overlay\n}\n\n// ── Loading icon — two-arrow sync / refresh icon ──────────────────────────────\n//\n// Two 150° arcs with a 30° visible gap on each side (left and right of centre).\n// Each arc has a small arrowhead at its leading end, creating the classic\n// \"two curved arrows circling\" sync look.\n//\n// ViewBox: 0 0 56 56 Centre: (28, 28) Radius: 22\n//\n// Arc 1 (through TOP): 195° → 345° clockwise → arrowhead at (49.25, 22.31)\n// Arc 2 (through BOTTOM): 15° → 165° clockwise → arrowhead at (6.75, 33.69)\n//\n// Key coordinates:\n// 195° → (6.75, 22.31) 345° → (49.25, 22.31) [Arc 1 endpoints]\n// 15° → (49.25, 33.69) 165° → ( 6.75, 33.69) [Arc 2 endpoints]\n\nfunction LoadingIcon () {\n const green = T.green\n const trackColor = 'color-mix(in srgb, var(--deframe-widget-color-brand-primary) 12%, transparent)'\n const sw = 2.8 // arc stroke-width\n const aw = 2.4 // arrowhead stroke-width\n\n return (\n <motion.svg\n data-test-id='swap-feedback-loading-icon'\n data-slot='swap-feedback-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 {/* Dim full-circle track */}\n <circle cx='28' cy='28' r='22' stroke={trackColor} strokeWidth={sw} />\n\n {/* Arc 1: 195° → 345° clockwise (passes through the top) */}\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 {/* Arrowhead at end of Arc 1 — clockwise tangent at 345° points down-right */}\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 {/* Arc 2: 15° → 165° clockwise (passes through the bottom) */}\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 {/* Arrowhead at end of Arc 2 — clockwise tangent at 165° points up-left */}\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// ── Success icon — spring-in green circle + animated checkmark ────────────────\n\nfunction SuccessIcon () {\n return (\n <motion.div\n data-test-id='swap-feedback-success-icon'\n data-slot='swap-feedback-success-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 style={{\n width: 84,\n height: 84,\n borderRadius: '50%',\n background: 'var(--deframe-widget-color-state-success)',\n boxShadow: '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 display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\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// ── Error icon — spring-in red circle + animated X ────────────────────────────\n\nconst ERROR_RED = 'var(--deframe-widget-color-state-error)'\n\nfunction ErrorIcon () {\n return (\n <motion.div\n data-test-id='swap-feedback-error-icon'\n data-slot='swap-feedback-error-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 style={{\n width: 84,\n height: 84,\n borderRadius: '50%',\n background: ERROR_RED,\n boxShadow: '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 display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\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// Re-export for SwapPanel convenience\nexport { AnimatePresence } from 'framer-motion'\n","import * as React from 'react'\nimport { motion, AnimatePresence } from 'framer-motion'\nimport { twMerge } from 'tailwind-merge'\nimport { PercentageChips } from './PercentageChips'\nimport { TokenInputCard } from './TokenInputCard'\nimport { SwapDirectionButton } from './SwapDirectionButton'\nimport { SwapFeedbackOverlay } from './SwapFeedbackOverlay'\nimport type { SwapPanelProps } from './types'\n\n// ── SwapPanel ──────────────────────────────────────────────────────────────────\n\n/**\n * Full token swap form orchestrator.\n *\n * Built-in behaviour:\n * - Hovering the \"from\" card reveals PercentageChips as an absolutely-positioned\n * tooltip above the card (no layout shift). A 150 ms hide-delay lets the\n * cursor travel from the card to the chips without them flickering away.\n * - Clicking a % chip sets fromAmount = balance × pct / 100\n * - SwapDirectionButton calls onSwapTokens\n * - Submit button is disabled when amount is empty / '0' or loading is true\n * - Submit button shows a spinner while loading\n * - History button sits top-left, styled as CloseButton (icon-only, hover bg)\n * - \"Avançado\" pill sits top-right with green outline; calls onAdvanced\n */\nexport function SwapPanel ({\n fromToken,\n toToken,\n fromAmount,\n toAmount,\n onFromAmountChange,\n onFromPercentageSelect,\n onFromTokenSelect,\n onToTokenSelect,\n onSwapTokens,\n fromBalance,\n fromBalanceSymbol,\n toBalance,\n toBalanceSymbol,\n fromConversionUsd,\n toConversionUsd,\n onSubmit,\n submitLabel = 'Revisar Troca',\n submitDisabled = false,\n onHistory,\n onAdvanced,\n loading = false,\n error = null,\n feedback = null,\n}: SwapPanelProps) {\n // Business logic state — kept intentionally (not hover-tracking)\n const [fromCardHovered, setFromCardHovered] = React.useState(false)\n const [selectedPct, setSelectedPct] = React.useState<number | null>(null)\n\n // Delayed hide — gives cursor time to travel from card → chips tooltip\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | undefined>(undefined)\n\n function handleHoverStart () {\n clearTimeout(hideTimerRef.current)\n setFromCardHovered(true)\n }\n\n function handleHoverEnd () {\n hideTimerRef.current = setTimeout(() => setFromCardHovered(false), 150)\n }\n\n // Clean up timer on unmount\n React.useEffect(() => () => clearTimeout(hideTimerRef.current), [])\n\n const isSubmitDisabled =\n submitDisabled || loading || !fromAmount || fromAmount === '0' || fromAmount === ''\n\n // ── Percentage chip handler ────────────────────────────────────────────────\n function handlePctSelect (pct: number) {\n setSelectedPct(pct)\n onFromPercentageSelect?.(pct)\n if (!fromBalance) return\n const bal = parseFloat(fromBalance.replace(/[^\\d.]/g, ''))\n if (isNaN(bal)) return\n const computed = ((bal * pct) / 100).toFixed(6).replace(/\\.?0+$/, '')\n onFromAmountChange(computed)\n }\n\n const submitClasses = twMerge(\n 'mt-[10px] 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 'transition-[background,color] duration-200',\n 'flex items-center justify-center gap-[var(--deframe-widget-size-gap-sm)]',\n 'font-[var(--deframe-widget-font-family)]',\n isSubmitDisabled\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\n data-test-id='swap-panel'\n data-slot='swap-panel'\n className='relative 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)] flex flex-col w-full max-w-[480px] box-border font-[var(--deframe-widget-font-family)]'\n >\n {/* ── Top row: history button only ── */}\n {onHistory && (\n <div\n data-test-id='swap-panel-top-row'\n data-slot='swap-panel-top-row'\n className='flex items-center justify-end mb-[var(--deframe-widget-size-gap-sm)]'\n >\n <HistoryButton onClick={onHistory} />\n </div>\n )}\n\n {/* ── \"From\" card — chips render inside the card via chipsSlot ── */}\n <TokenInputCard\n token={{\n name: fromToken.name,\n symbol: fromToken.symbol,\n color: fromToken.color,\n iconUrl: fromToken.iconUrl,\n network: fromToken.network,\n networkColor: fromToken.networkColor,\n networkIconUrl: fromToken.networkIconUrl,\n }}\n amount={fromAmount}\n onAmountChange={(v) => {\n setSelectedPct(null)\n onFromAmountChange(v)\n }}\n balance={fromBalance}\n balanceSymbol={fromBalanceSymbol}\n conversionUsd={fromConversionUsd}\n onTokenSelect={onFromTokenSelect}\n error={error}\n onHoverChange={(h) => (h ? handleHoverStart() : handleHoverEnd())}\n chipsSlot={\n <AnimatePresence>\n {fromCardHovered && (\n <motion.div\n data-test-id='swap-panel-pct-chips'\n data-slot='swap-panel-pct-chips'\n key='pct-chips'\n initial={{ opacity: 0, y: -4 }}\n animate={{ opacity: 1, y: 0 }}\n exit={{ opacity: 0, y: -4 }}\n transition={{ duration: 0.15 }}\n >\n <PercentageChips\n selected={selectedPct}\n onSelect={handlePctSelect}\n />\n </motion.div>\n )}\n </AnimatePresence>\n }\n />\n\n {/* ── Direction swap button (overlaps both cards) ── */}\n <div\n data-test-id='swap-panel-direction-row'\n data-slot='swap-panel-direction-row'\n className='flex justify-center relative -my-[var(--deframe-widget-size-gap-sm)] z-[1]'\n >\n <SwapDirectionButton onClick={onSwapTokens} disabled={!onSwapTokens} />\n </div>\n\n {/* ── \"To\" TokenInputCard ── */}\n <TokenInputCard\n token={{\n name: toToken.name,\n symbol: toToken.symbol,\n color: toToken.color,\n iconUrl: toToken.iconUrl,\n network: toToken.network,\n networkColor: toToken.networkColor,\n networkIconUrl: toToken.networkIconUrl,\n }}\n amount={toAmount}\n balance={toBalance}\n balanceSymbol={toBalanceSymbol}\n conversionUsd={toConversionUsd}\n onTokenSelect={onToTokenSelect}\n readOnly\n />\n\n {/* ── Avançado — right-aligned, below inputs ── */}\n {onAdvanced && (\n <div\n data-test-id='swap-panel-advanced-row'\n data-slot='swap-panel-advanced-row'\n className='flex justify-end mt-[var(--deframe-widget-size-gap-sm)]'\n >\n <AdvancedButton onClick={onAdvanced} />\n </div>\n )}\n\n {/* ── Submit button ── */}\n <button\n data-test-id='swap-panel-submit'\n data-slot='swap-panel-submit'\n onClick={!isSubmitDisabled ? onSubmit : undefined}\n disabled={isSubmitDisabled}\n title={error === 'insufficient_balance' ? 'Adicione fundos para continuar' : undefined}\n className={submitClasses}\n >\n {loading ? <Spinner /> : submitLabel}\n </button>\n\n {/* ── Feedback overlay (glass blur) ── */}\n <AnimatePresence>\n {feedback && (\n <SwapFeedbackOverlay\n key={feedback.variant}\n variant={feedback.variant}\n title={feedback.title}\n subtitle={feedback.subtitle}\n />\n )}\n </AnimatePresence>\n </div>\n )\n}\n\n// ── HistoryButton — same visual language as CloseButton ───────────────────────\n\ninterface HistoryButtonProps {\n onClick: () => void\n}\n\nfunction HistoryButton ({ onClick }: HistoryButtonProps) {\n return (\n <button\n data-test-id='history-button'\n data-slot='history-button'\n onClick={onClick}\n aria-label='Histórico de transações'\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 {/* Clock icon — same size/style as CloseButton SVG */}\n <svg\n data-test-id='history-button-icon'\n data-slot='history-button-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// ── AdvancedButton — green outlined pill ──────────────────────────────────────\n\ninterface AdvancedButtonProps {\n onClick: () => void\n}\n\nfunction AdvancedButton ({ onClick }: AdvancedButtonProps) {\n return (\n <button\n data-test-id='advanced-button'\n data-slot='advanced-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 'border border-[color:color-mix(in_srgb,var(--deframe-widget-color-brand-primary)_32%,transparent)]',\n '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 {/* Settings / sliders icon */}\n <svg\n data-test-id='advanced-button-icon'\n data-slot='advanced-button-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\n data-test-id='advanced-button-label'\n data-slot='advanced-button-label'\n >\n Avançado\n </span>\n </button>\n )\n}\n\n// ── Minimal spinner ────────────────────────────────────────────────────────────\n\nfunction Spinner () {\n return (\n <svg\n data-test-id='spinner'\n data-slot='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","import * as React from 'react'\n\n// ── TransactionDetailRow ───────────────────────────────────────────────────────\n\nexport interface TransactionDetailRowProps {\n /** Uppercase label — e.g. 'VALIDADE', 'SLIPPAGE' */\n label: string\n /** Formatted value — e.g. '30 min', '0.5%' */\n value: string\n /** Optional value colour override — data-driven hex, kept as style */\n valueColor?: string\n /** Show a horizontal divider below this row (default false) */\n divider?: boolean\n}\n\n/**\n * Single label + value row used inside TransactionDetails.\n *\n * Label: small, uppercase, letter-spaced, muted\n * Value: semibold, primary colour (or custom override)\n */\nexport function TransactionDetailRow ({\n label,\n value,\n valueColor,\n divider = false,\n}: TransactionDetailRowProps) {\n return (\n <>\n <div\n data-test-id='transaction-detail-row'\n data-slot='transaction-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='transaction-detail-row-label'\n data-slot='transaction-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='transaction-detail-row-value'\n data-slot='transaction-detail-row-value'\n className={[\n 'text-[13px] [font-weight:var(--deframe-widget-font-weight-semibold)] text-right font-[var(--deframe-widget-font-family)]',\n !valueColor ? 'text-[color:var(--deframe-widget-color-text-primary)]' : '',\n ].join(' ')}\n style={valueColor ? { color: valueColor } : undefined}\n >\n {value}\n </span>\n </div>\n\n {divider && (\n <div\n data-test-id='transaction-detail-row-divider'\n data-slot='transaction-detail-row-divider'\n className='h-px bg-[var(--deframe-widget-color-border-secondary)]'\n />\n )}\n </>\n )\n}\n","import * as React from 'react'\nimport { twMerge } from 'tailwind-merge'\nimport { TransactionDetailRow } from './TransactionDetailRow'\n\n// ── TransactionDetails ─────────────────────────────────────────────────────────\n\nexport interface TransactionDetailItem {\n /** Row label — displayed uppercase, muted */\n label: string\n /** Formatted value string */\n value: string\n /** Optional colour override for value text */\n valueColor?: string\n}\n\nexport interface TransactionDetailsProps {\n /** Panel heading — default: 'Detalhes da transação' */\n title?: string\n /** Conversion subtitle, e.g. '9.682785 USDC = 0.003873 ETH' */\n subtitle?: string\n /** List of detail rows */\n items: TransactionDetailItem[]\n /** Called when the ✕ button is pressed */\n onClose?: () => void\n}\n\n/**\n * Transaction detail panel — sits beside the SwapPanel when \"Avançado\" is pressed.\n */\nexport function TransactionDetails ({\n title = 'Detalhes da transação',\n subtitle,\n items,\n onClose,\n}: TransactionDetailsProps) {\n return (\n <div\n data-test-id='transaction-details'\n data-slot='transaction-details'\n className='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] box-border font-[var(--deframe-widget-font-family)]'\n >\n {/* ── Header ── */}\n <div\n data-test-id='transaction-details-header'\n data-slot='transaction-details-header'\n className={[\n 'flex justify-between items-center',\n subtitle ? 'mb-[6px]' : 'mb-[var(--deframe-widget-size-gap-none)]',\n ].join(' ')}\n >\n <span\n data-test-id='transaction-details-title'\n data-slot='transaction-details-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 {title}\n </span>\n\n {onClose && (\n <CloseIconButton\n data-test-id='transaction-details-close'\n data-slot='transaction-details-close'\n onClick={onClose}\n />\n )}\n </div>\n\n {/* ── Subtitle ── */}\n {subtitle && (\n <p\n data-test-id='transaction-details-subtitle'\n data-slot='transaction-details-subtitle'\n className='text-[13px] text-[color:var(--deframe-widget-color-text-secondary)] m-[var(--deframe-widget-size-gap-none)] mb-[var(--deframe-widget-size-gap-sm)] leading-[1.4] font-[inherit]'\n >\n {subtitle}\n </p>\n )}\n\n {/* ── Top divider ── */}\n <div\n data-test-id='transaction-details-divider'\n data-slot='transaction-details-divider'\n className={[\n 'h-px bg-[var(--deframe-widget-color-border-secondary)]',\n subtitle ? 'mt-[var(--deframe-widget-size-gap-none)]' : 'mt-[var(--deframe-widget-size-gap-sm)]',\n ].join(' ')}\n />\n\n {/* ── Detail rows ── */}\n {items.map((item, i) => (\n <TransactionDetailRow\n key={item.label}\n label={item.label}\n value={item.value}\n valueColor={item.valueColor}\n divider={i < items.length - 1}\n />\n ))}\n </div>\n )\n}\n\n// ── Small ✕ close button — inline variant ─────────────────────────────────────\n\ninterface CloseIconButtonProps {\n onClick: () => void\n 'data-test-id'?: string\n 'data-slot'?: string\n}\n\nfunction CloseIconButton ({ onClick, ...rest }: CloseIconButtonProps) {\n return (\n <button\n onClick={onClick}\n aria-label='Fechar detalhes'\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',\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 {...rest}\n >\n <svg\n data-test-id='transaction-details-close-icon'\n data-slot='transaction-details-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 )\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 { 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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]' 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 { 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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]' 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 { 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 { 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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]' 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 { 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 { 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 { 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 { 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 { HiXMark } from 'react-icons/hi2'\nimport { twMerge } from 'tailwind-merge'\n\nexport interface CloseButtonProps {\n onClick?: () => void;\n testId?: string;\n ariaLabel?: string;\n className?: string;\n}\n\nexport const 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","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 '../close-button'\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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]'>{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}\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}) => {\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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]'>{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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]'>{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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]'>{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 '../close-button'\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 { 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 { 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 { ActionSheet } from '../action-sheet'\nimport { BackgroundContainer, Navbar } from '../layout'\nimport { CloseButton } from '../close-button'\nimport { ListItem, ListItemContent, ListItemLeftSide, ListItemRightSide } from '../lists'\nimport { TextBody, TextHeading } from '../texts'\nimport { TertiaryButton } from '../buttons'\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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]' 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='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]'>{token.symbol}</TextBody>\n </ListItemContent>\n <ListItemRightSide>\n <TextBody>{formattedBalance}</TextBody>\n <TextBody variant='[font-size:var(--deframe-widget-font-size-sm)] [line-height:var(--deframe-widget-font-leading-sm)]'>{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 { TextBody, TextHeading } from '../texts'\nimport { MdHistory } from 'react-icons/md'\nimport type { SwapFormLabels } from '../../types/swap-form-labels'\n\nexport interface SwapFormViewProps {\n labels: SwapFormLabels;\n onHistoryClick: () => void;\n fromCard: React.ReactNode;\n switchButton: React.ReactNode;\n toCard: React.ReactNode;\n advancedSettings: React.ReactNode;\n transactionDetails: React.ReactNode;\n confirmButton: React.ReactNode;\n}\n\nexport const SwapFormView: React.FC<SwapFormViewProps> = ({\n labels,\n onHistoryClick,\n fromCard,\n switchButton,\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 <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 {fromCard}\n {switchButton}\n {toCard}\n </div>\n {advancedSettings}\n <div className='pb-xl'>{transactionDetails}</div>\n </div>\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 {confirmButton}\n </div>\n </>\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 } 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 amountSlot?: React.ReactNode;\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 amountSlot,\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 {amountSlot ?? (\n <>\n <SwapAmountInputView\n value={amountValue}\n hasError={amountHasError}\n onChange={onAmountChange}\n maxFractionDigits={maxFractionDigits}\n ariaLabel={labels.amountPlaceholder}\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 </>\n )}\n </div>\n </div>\n </SectionCard>\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 { 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='bg-bg-subtle dark:bg-bg-subtle-dark rounded shadow-sm p-md flex flex-col lg:!bg-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 { 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 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"]}