@lifi/widget 4.0.0-beta.17 → 4.0.0-beta.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/esm/App.js.map +1 -1
- package/dist/esm/AppDefault.js.map +1 -1
- package/dist/esm/AppDrawer.js.map +1 -1
- package/dist/esm/AppLayout.js.map +1 -1
- package/dist/esm/AppProvider.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInputStartAdornment.js.map +1 -1
- package/dist/esm/components/AmountInput/PriceFormHelperText.js.map +1 -1
- package/dist/esm/components/AppContainer.js.map +1 -1
- package/dist/esm/components/Avatar/AccountAvatar.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.js.map +1 -1
- package/dist/esm/components/Avatar/Avatar.style.js.map +1 -1
- package/dist/esm/components/Avatar/ChainBadgeContent.js.map +1 -1
- package/dist/esm/components/Avatar/SmallAvatar.js.map +1 -1
- package/dist/esm/components/Avatar/TokenAvatar.js.map +1 -1
- package/dist/esm/components/Avatar/utils.js.map +1 -1
- package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js.map +1 -1
- package/dist/esm/components/BottomSheet/BottomSheet.js.map +1 -1
- package/dist/esm/components/Card/Card.js.map +1 -1
- package/dist/esm/components/Card/CardIconButton.js.map +1 -1
- package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
- package/dist/esm/components/ChainSelect/ChainSelect.style.js.map +1 -1
- package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
- package/dist/esm/components/Chains/AllChainsAvatar.js +1 -1
- package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
- package/dist/esm/components/Chains/ChainList.js.map +1 -1
- package/dist/esm/components/Chains/ChainList.style.js.map +1 -1
- package/dist/esm/components/Chains/ChainListItem.js.map +1 -1
- package/dist/esm/components/Chains/ChainSearchInput.js.map +1 -1
- package/dist/esm/components/Chains/ChainsExpanded.js.map +1 -1
- package/dist/esm/components/Chains/PinChainButton.js.map +1 -1
- package/dist/esm/components/Chains/SelectChainContent.js.map +1 -1
- package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
- package/dist/esm/components/ContextMenu.js.map +1 -1
- package/dist/esm/components/ContractComponent/ContractComponent.js.map +1 -1
- package/dist/esm/components/ContractComponent/ItemPrice.js.map +1 -1
- package/dist/esm/components/ContractComponent/NFT/NFT.js.map +1 -1
- package/dist/esm/components/ContractComponent/NFT/NFTBase.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.js.map +1 -1
- package/dist/esm/components/Expansion/Expansion.js.map +1 -1
- package/dist/esm/components/Expansion/ExpansionTransition.js.map +1 -1
- package/dist/esm/components/FeeBreakdownTooltip.js.map +1 -1
- package/dist/esm/components/Header/ActivitiesButton.js.map +1 -1
- package/dist/esm/components/Header/BackButton.js.map +1 -1
- package/dist/esm/components/Header/CloseDrawerButton.js.map +1 -1
- package/dist/esm/components/Header/DisconnectIconButton.js.map +1 -1
- package/dist/esm/components/Header/Header.js.map +1 -1
- package/dist/esm/components/Header/Header.style.js.map +1 -1
- package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
- package/dist/esm/components/Header/SettingsButton.js.map +1 -1
- package/dist/esm/components/Header/SettingsButton.style.js.map +1 -1
- package/dist/esm/components/Header/SplitNavigationTabs.js.map +1 -1
- package/dist/esm/components/Header/WalletHeader.js.map +1 -1
- package/dist/esm/components/Header/WalletMenu.js.map +1 -1
- package/dist/esm/components/IconCircle/IconCircle.js.map +1 -1
- package/dist/esm/components/IconCircle/IconCircle.style.js.map +1 -1
- package/dist/esm/components/Initializer.js.map +1 -1
- package/dist/esm/components/ListItemButton.js.map +1 -1
- package/dist/esm/components/Messages/AccountDeployedMessage.js.map +1 -1
- package/dist/esm/components/Messages/AccountNotDeployedMessage.js.map +1 -1
- package/dist/esm/components/Messages/FundsSufficiencyMessage.js.map +1 -1
- package/dist/esm/components/Messages/GasRefuelMessage.js.map +1 -1
- package/dist/esm/components/Messages/GasSufficiencyMessage.js.map +1 -1
- package/dist/esm/components/Messages/MinFromAmountUSDMessage.js.map +1 -1
- package/dist/esm/components/Messages/MissingRouteRequiredAccountMessage.js.map +1 -1
- package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
- package/dist/esm/components/Messages/useMessageQueue.js.map +1 -1
- package/dist/esm/components/NotFound.js.map +1 -1
- package/dist/esm/components/PageEntered.js.map +1 -1
- package/dist/esm/components/PoweredBy/PoweredBy.js.map +1 -1
- package/dist/esm/components/ProgressToNextUpdate.js.map +1 -1
- package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js.map +1 -1
- package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.style.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCard.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCardEssentials.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteCardSkeleton.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteDetails.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteNotFoundCard.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteToken.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteTokens.js.map +1 -1
- package/dist/esm/components/RouteCard/getMatchingLabels.js.map +1 -1
- package/dist/esm/components/Routes/Routes.js.map +1 -1
- package/dist/esm/components/Routes/RoutesContent.js.map +1 -1
- package/dist/esm/components/Routes/RoutesExpanded.js.map +1 -1
- package/dist/esm/components/Routes/RoutesExpanded.style.js.map +1 -1
- package/dist/esm/components/Search/SearchInput.js.map +1 -1
- package/dist/esm/components/SelectChainAndToken.js.map +1 -1
- package/dist/esm/components/SelectTokenButton/SelectTokenButton.js.map +1 -1
- package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletButton.js +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletButton.js.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletExpandButton.js.map +1 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.js.map +1 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.style.js.map +1 -1
- package/dist/esm/components/Step/CircularProgress.js.map +1 -1
- package/dist/esm/components/Step/CircularProgress.style.js.map +1 -1
- package/dist/esm/components/Step/DestinationWalletAddress.js.map +1 -1
- package/dist/esm/components/Step/Step.js.map +1 -1
- package/dist/esm/components/Step/StepAction.js.map +1 -1
- package/dist/esm/components/Step/StepActions.js.map +1 -1
- package/dist/esm/components/Step/StepList.js.map +1 -1
- package/dist/esm/components/StepActions/StepActions.js.map +1 -1
- package/dist/esm/components/StepDivider/StepDivider.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
- package/dist/esm/components/TextFitter/TextFitter.js.map +1 -1
- package/dist/esm/components/Timer/StepTimer.js.map +1 -1
- package/dist/esm/components/Timer/TimerContent.js.map +1 -1
- package/dist/esm/components/Token/Token.js.map +1 -1
- package/dist/esm/components/TokenList/PinTokenButton.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
- package/dist/esm/components/TokenList/TokenList.js.map +1 -1
- package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
- package/dist/esm/components/TokenList/TokenNotFound.js.map +1 -1
- package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
- package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
- package/dist/esm/components/TokenRate/TokenRate.js.map +1 -1
- package/dist/esm/components/Tools/ToolItem.js.map +1 -1
- package/dist/esm/components/Tools/Tools.js.map +1 -1
- package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
- package/dist/esm/components/TransactionCard/TransactionCard.js.map +1 -1
- package/dist/esm/components/TransactionCard/TransactionCardSkeleton.js.map +1 -1
- package/dist/esm/components/TransactionDetails.js.map +1 -1
- package/dist/esm/config/version.d.ts +1 -1
- package/dist/esm/config/version.js +1 -1
- package/dist/esm/config/version.js.map +1 -1
- package/dist/esm/hooks/timer/time.js.map +1 -1
- package/dist/esm/hooks/timer/useExecutionTimer.js.map +1 -1
- package/dist/esm/hooks/timer/useInterval.js.map +1 -1
- package/dist/esm/hooks/timer/useTimer.js.map +1 -1
- package/dist/esm/hooks/timer/validate.js.map +1 -1
- package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
- package/dist/esm/hooks/useActionMessage.js +2 -2
- package/dist/esm/hooks/useActionMessage.js.map +1 -1
- package/dist/esm/hooks/useAddressActivity.js.map +1 -1
- package/dist/esm/hooks/useAddressValidation.js.map +1 -1
- package/dist/esm/hooks/useAvailableChains.js.map +1 -1
- package/dist/esm/hooks/useChain.js.map +1 -1
- package/dist/esm/hooks/useChains.js.map +1 -1
- package/dist/esm/hooks/useContactSupport.js.map +1 -1
- package/dist/esm/hooks/useDebouncedWatch.js.map +1 -1
- package/dist/esm/hooks/useDefaultElementId.js.map +1 -1
- package/dist/esm/hooks/useExplorer.js.map +1 -1
- package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
- package/dist/esm/hooks/useFromAmountThreshold.js.map +1 -1
- package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
- package/dist/esm/hooks/useGasRecommendation.js.map +1 -1
- package/dist/esm/hooks/useGasRefuel.js.map +1 -1
- package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
- package/dist/esm/hooks/useHasChainExpansion.js.map +1 -1
- package/dist/esm/hooks/useHeader.js.map +1 -1
- package/dist/esm/hooks/useInitializeSDKProviders.js.map +1 -1
- package/dist/esm/hooks/useInitializer.js.map +1 -1
- package/dist/esm/hooks/useIsBatchingSupported.js.map +1 -1
- package/dist/esm/hooks/useIsContractAddress.js.map +1 -1
- package/dist/esm/hooks/useLanguages.js.map +1 -1
- package/dist/esm/hooks/useListHeight.js.map +1 -1
- package/dist/esm/hooks/useLongPress.js.map +1 -1
- package/dist/esm/hooks/useNavigateBack.js.map +1 -1
- package/dist/esm/hooks/useRouteExecution.js +0 -2
- package/dist/esm/hooks/useRouteExecution.js.map +1 -1
- package/dist/esm/hooks/useRouteRequiredAccountConnection.js.map +1 -1
- package/dist/esm/hooks/useRoutes.js.map +1 -1
- package/dist/esm/hooks/useScrollableContainer.js.map +1 -1
- package/dist/esm/hooks/useSetContentHeight.js.map +1 -1
- package/dist/esm/hooks/useSettingMonitor.js.map +1 -1
- package/dist/esm/hooks/useSwapOnly.js.map +1 -1
- package/dist/esm/hooks/useToAddressAutoPopulate.js.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
- package/dist/esm/hooks/useToAddressReset.js.map +1 -1
- package/dist/esm/hooks/useToken.js.map +1 -1
- package/dist/esm/hooks/useTokenAddressBalance.js.map +1 -1
- package/dist/esm/hooks/useTokenBalance.js.map +1 -1
- package/dist/esm/hooks/useTokenBalances.js.map +1 -1
- package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
- package/dist/esm/hooks/useTokenRateText.js.map +1 -1
- package/dist/esm/hooks/useTokenSearch.js.map +1 -1
- package/dist/esm/hooks/useTokens.js.map +1 -1
- package/dist/esm/hooks/useTools.js.map +1 -1
- package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
- package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
- package/dist/esm/hooks/useTransactionList.js.map +1 -1
- package/dist/esm/hooks/useWideVariant.js.map +1 -1
- package/dist/esm/hooks/useWidgetChains.js.map +1 -1
- package/dist/esm/hooks/useWidgetEvents.js.map +1 -1
- package/dist/esm/i18n/bn.json +3 -0
- package/dist/esm/i18n/de.json +3 -0
- package/dist/esm/i18n/es.json +3 -0
- package/dist/esm/i18n/fr.json +3 -0
- package/dist/esm/i18n/hi.json +3 -0
- package/dist/esm/i18n/id.json +3 -0
- package/dist/esm/i18n/it.json +3 -0
- package/dist/esm/i18n/ja.json +3 -0
- package/dist/esm/i18n/ko.json +3 -0
- package/dist/esm/i18n/pl.json +3 -0
- package/dist/esm/i18n/pt.json +3 -0
- package/dist/esm/i18n/th.json +3 -0
- package/dist/esm/i18n/tr.json +3 -0
- package/dist/esm/i18n/uk.json +3 -0
- package/dist/esm/i18n/vi.json +3 -0
- package/dist/esm/i18n/zh.json +3 -0
- package/dist/esm/pages/ActivitiesPage/ActiveTransactionItem.js.map +1 -1
- package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
- package/dist/esm/pages/ActivitiesPage/ActivitiesPageMenuButton.js.map +1 -1
- package/dist/esm/pages/ActivitiesPage/TransactionHistoryEmpty.js.map +1 -1
- package/dist/esm/pages/ActivitiesPage/TransactionHistoryItem.js.map +1 -1
- package/dist/esm/pages/LanguagesPage.js.map +1 -1
- package/dist/esm/pages/MainPage/MainPage.js.map +1 -1
- package/dist/esm/pages/MainPage/MainWarningMessages.js.map +1 -1
- package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
- package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
- package/dist/esm/pages/SelectChainPage/SelectChainPage.js.map +1 -1
- package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
- package/dist/esm/pages/SelectTokenPage/SearchTokenInput.js.map +1 -1
- package/dist/esm/pages/SelectTokenPage/SelectTokenPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
- package/dist/esm/pages/SendToWallet/BookmarksPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js.map +1 -1
- package/dist/esm/pages/SendToWallet/ConnectedWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/RecentWalletsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToConfiguredWalletPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
- package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/GasPriceSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/LanguageSetting.js.map +1 -1
- package/dist/esm/pages/SettingsPage/ResetSettingsButton.js.map +1 -1
- package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SettingsPage.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.style.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SmallBalanceFilterSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/ActionRow.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/ReceiptsCard.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/SentToWalletRow.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/StepActionRow.js +2 -2
- package/dist/esm/pages/TransactionDetailsPage/StepActionRow.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/StepActionsList.js +11 -5
- package/dist/esm/pages/TransactionDetailsPage/StepActionsList.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsSkeleton.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/TransferIdCard.js.map +1 -1
- package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/RouteTracker.js.map +1 -1
- package/dist/esm/pages/TransactionPage/StartTransactionButton.js.map +1 -1
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/StatusBottomSheet.style.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TransactionPage.js.map +1 -1
- package/dist/esm/pages/TransactionPage/utils.js.map +1 -1
- package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
- package/dist/esm/providers/I18nProvider/i18n.js.map +1 -1
- package/dist/esm/providers/QueryClientProvider.js.map +1 -1
- package/dist/esm/providers/SDKClientProvider.js.map +1 -1
- package/dist/esm/providers/ThemeProvider/ThemeProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/WalletProvider.js.map +1 -1
- package/dist/esm/providers/WalletProvider/useExternalWalletProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
- package/dist/esm/stores/StoreProvider.js.map +1 -1
- package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
- package/dist/esm/stores/bookmarks/createBookmarkStore.js.map +1 -1
- package/dist/esm/stores/bookmarks/useBookmarkActions.js.map +1 -1
- package/dist/esm/stores/bookmarks/useBookmarks.js.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/useChainOrder.js.map +1 -1
- package/dist/esm/stores/form/FormStore.js.map +1 -1
- package/dist/esm/stores/form/FormUpdater.js.map +1 -1
- package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
- package/dist/esm/stores/form/createFormStore.js.map +1 -1
- package/dist/esm/stores/form/getDefaultValuesFromQueryString.js.map +1 -1
- package/dist/esm/stores/form/useFieldActions.js.map +1 -1
- package/dist/esm/stores/form/useFieldValues.js.map +1 -1
- package/dist/esm/stores/form/useFormRef.js.map +1 -1
- package/dist/esm/stores/form/useFormStore.js.map +1 -1
- package/dist/esm/stores/form/useTouchedFields.js.map +1 -1
- package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
- package/dist/esm/stores/inputMode/useInputModeStore.js.map +1 -1
- package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js.map +1 -1
- package/dist/esm/stores/pinnedTokens/createPinnedTokensStore.js.map +1 -1
- package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
- package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
- package/dist/esm/stores/routes/useIntermediateRoutesStore.js.map +1 -1
- package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
- package/dist/esm/stores/routes/useSetExecutableRoute.js.map +1 -1
- package/dist/esm/stores/routes/utils.js.map +1 -1
- package/dist/esm/stores/settings/SettingsStore.js.map +1 -1
- package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
- package/dist/esm/stores/settings/useSettings.js.map +1 -1
- package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
- package/dist/esm/stores/settings/useSplitSubvariantStore.js.map +1 -1
- package/dist/esm/themes/createTheme.js.map +1 -1
- package/dist/esm/themes/utils.js.map +1 -1
- package/dist/esm/types/events.js.map +1 -1
- package/dist/esm/types/widget.js.map +1 -1
- package/dist/esm/utils/compactNumberFormatter.js.map +1 -1
- package/dist/esm/utils/converters.js.map +1 -1
- package/dist/esm/utils/currencyExtendedFormatter.js.map +1 -1
- package/dist/esm/utils/deepEqual.js.map +1 -1
- package/dist/esm/utils/deepMerge.js.map +1 -1
- package/dist/esm/utils/fees.js.map +1 -1
- package/dist/esm/utils/format.js.map +1 -1
- package/dist/esm/utils/getActionMessage.js.map +1 -1
- package/dist/esm/utils/getErrorMessage.js.map +1 -1
- package/dist/esm/utils/getPriceImpact.js.map +1 -1
- package/dist/esm/utils/input.js.map +1 -1
- package/dist/esm/utils/item.js.map +1 -1
- package/dist/esm/utils/percentFormatter.js.map +1 -1
- package/dist/esm/utils/prepareActions.js.map +1 -1
- package/dist/esm/utils/timer.js.map +1 -1
- package/dist/esm/utils/token.js.map +1 -1
- package/dist/esm/utils/tokenList.js.map +1 -1
- package/dist/esm/utils/variant.js.map +1 -1
- package/dist/esm/utils/widgetSize.js.map +1 -1
- package/package.json +12 -12
- package/src/components/Chains/AllChainsAvatar.tsx +1 -1
- package/src/components/SendToWallet/SendToWalletButton.tsx +1 -1
- package/src/config/version.ts +1 -1
- package/src/hooks/useActionMessage.ts +4 -3
- package/src/hooks/useRouteExecution.ts +0 -2
- package/src/pages/TransactionDetailsPage/StepActionRow.tsx +3 -2
- package/src/pages/TransactionDetailsPage/StepActionsList.tsx +19 -12
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"URLSearchParamsBuilder.js","names":[],"sources":["../../../../src/stores/form/URLSearchParamsBuilder.tsx"],"sourcesContent":["import { useLocation } from '@tanstack/react-router'\nimport { useEffect } from 'react'\nimport { useAddressValidation } from '../../hooks/useAddressValidation.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useBookmarkActions } from '../bookmarks/useBookmarkActions.js'\nimport type { FormFieldNames } from '../form/types.js'\nimport { useFieldActions } from '../form/useFieldActions.js'\nimport { useFieldValues } from '../form/useFieldValues.js'\nimport { useTouchedFields } from '../form/useTouchedFields.js'\nimport { getDefaultValuesFromQueryString } from './getDefaultValuesFromQueryString.js'\n\nconst formValueKeys: FormFieldNames[] = [\n 'fromAmount',\n 'fromChain',\n 'fromToken',\n 'toAddress',\n 'toChain',\n 'toToken',\n]\n\nexport const URLSearchParamsBuilder = () => {\n const { pathname } = useLocation()\n const touchedFields = useTouchedFields()\n const values = useFieldValues(...formValueKeys)\n const { setSelectedBookmark, addRecentWallet } = useBookmarkActions()\n const { validateAddress } = useAddressValidation()\n const { buildUrl } = useWidgetConfig()\n // Using these methods as trying to use the touchedFields and values above\n // often has a lag that can effect the widgets initialisation sequence\n // and accidentally cause values to be wiped from the query string\n const { getFieldValues, isTouched, setUserAndDefaultValues } =\n useFieldActions()\n\n useEffect(() => {\n // get the initial values from the querystring\n const formValues = getDefaultValuesFromQueryString({ buildUrl })\n const { toAddress, ...initialFormValues } = formValues\n\n /**\n * When URL builder is enabled and user opens a page with toAddress parameter,\n * validate the address and set it up as a bookmark. This allows direct linking\n * to the widget with a pre-filled destination address that will be treated the\n * same way as a manually entered and validated address.\n */\n const initializeFromAddress = async () => {\n if (toAddress) {\n try {\n const validationResult = await validateAddress({\n value: toAddress,\n })\n if (validationResult.isValid && toAddress) {\n const bookmark = {\n address: validationResult.address,\n chainType: validationResult.chainType,\n }\n setUserAndDefaultValues({ toAddress })\n setSelectedBookmark(bookmark)\n addRecentWallet(bookmark)\n }\n } catch (_) {\n // Address validation failed\n }\n }\n }\n\n setUserAndDefaultValues(initialFormValues)\n initializeFromAddress()\n }, [\n setUserAndDefaultValues,\n validateAddress,\n setSelectedBookmark,\n addRecentWallet,\n buildUrl,\n ])\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: run only when pathname changes\n useEffect(() => {\n // set the values on the querysting\n const url = new URL(window.location as any)\n formValueKeys.forEach((key, _index) => {\n const value = getFieldValues(key)[0]\n if (isTouched(key) && value) {\n url.searchParams.set(key, value.toString())\n } else if (url.searchParams.has(key) && !value) {\n url.searchParams.delete(key)\n }\n })\n url.searchParams.sort()\n window.history.replaceState(window.history.state, '', url)\n }, [pathname, touchedFields, values, isTouched, getFieldValues])\n\n return null\n}\n"],"mappings":";;;;;;;;;;AAWA,MAAM,gBAAkC;CACtC;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,+BAA+B;CAC1C,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,gBAAgB,kBAAkB;CACxC,MAAM,SAAS,eAAe,GAAG,cAAc;CAC/C,MAAM,EAAE,qBAAqB,oBAAoB,oBAAoB;CACrE,MAAM,EAAE,oBAAoB,sBAAsB;CAClD,MAAM,EAAE,aAAa,iBAAiB;CAItC,MAAM,EAAE,gBAAgB,WAAW,4BACjC,iBAAiB;
|
|
1
|
+
{"version":3,"file":"URLSearchParamsBuilder.js","names":[],"sources":["../../../../src/stores/form/URLSearchParamsBuilder.tsx"],"sourcesContent":["import { useLocation } from '@tanstack/react-router'\nimport { useEffect } from 'react'\nimport { useAddressValidation } from '../../hooks/useAddressValidation.js'\nimport { useWidgetConfig } from '../../providers/WidgetProvider/WidgetProvider.js'\nimport { useBookmarkActions } from '../bookmarks/useBookmarkActions.js'\nimport type { FormFieldNames } from '../form/types.js'\nimport { useFieldActions } from '../form/useFieldActions.js'\nimport { useFieldValues } from '../form/useFieldValues.js'\nimport { useTouchedFields } from '../form/useTouchedFields.js'\nimport { getDefaultValuesFromQueryString } from './getDefaultValuesFromQueryString.js'\n\nconst formValueKeys: FormFieldNames[] = [\n 'fromAmount',\n 'fromChain',\n 'fromToken',\n 'toAddress',\n 'toChain',\n 'toToken',\n]\n\nexport const URLSearchParamsBuilder = () => {\n const { pathname } = useLocation()\n const touchedFields = useTouchedFields()\n const values = useFieldValues(...formValueKeys)\n const { setSelectedBookmark, addRecentWallet } = useBookmarkActions()\n const { validateAddress } = useAddressValidation()\n const { buildUrl } = useWidgetConfig()\n // Using these methods as trying to use the touchedFields and values above\n // often has a lag that can effect the widgets initialisation sequence\n // and accidentally cause values to be wiped from the query string\n const { getFieldValues, isTouched, setUserAndDefaultValues } =\n useFieldActions()\n\n useEffect(() => {\n // get the initial values from the querystring\n const formValues = getDefaultValuesFromQueryString({ buildUrl })\n const { toAddress, ...initialFormValues } = formValues\n\n /**\n * When URL builder is enabled and user opens a page with toAddress parameter,\n * validate the address and set it up as a bookmark. This allows direct linking\n * to the widget with a pre-filled destination address that will be treated the\n * same way as a manually entered and validated address.\n */\n const initializeFromAddress = async () => {\n if (toAddress) {\n try {\n const validationResult = await validateAddress({\n value: toAddress,\n })\n if (validationResult.isValid && toAddress) {\n const bookmark = {\n address: validationResult.address,\n chainType: validationResult.chainType,\n }\n setUserAndDefaultValues({ toAddress })\n setSelectedBookmark(bookmark)\n addRecentWallet(bookmark)\n }\n } catch (_) {\n // Address validation failed\n }\n }\n }\n\n setUserAndDefaultValues(initialFormValues)\n initializeFromAddress()\n }, [\n setUserAndDefaultValues,\n validateAddress,\n setSelectedBookmark,\n addRecentWallet,\n buildUrl,\n ])\n\n // biome-ignore lint/correctness/useExhaustiveDependencies: run only when pathname changes\n useEffect(() => {\n // set the values on the querysting\n const url = new URL(window.location as any)\n formValueKeys.forEach((key, _index) => {\n const value = getFieldValues(key)[0]\n if (isTouched(key) && value) {\n url.searchParams.set(key, value.toString())\n } else if (url.searchParams.has(key) && !value) {\n url.searchParams.delete(key)\n }\n })\n url.searchParams.sort()\n window.history.replaceState(window.history.state, '', url)\n }, [pathname, touchedFields, values, isTouched, getFieldValues])\n\n return null\n}\n"],"mappings":";;;;;;;;;;AAWA,MAAM,gBAAkC;CACtC;CACA;CACA;CACA;CACA;CACA;CACD;AAED,MAAa,+BAA+B;CAC1C,MAAM,EAAE,aAAa,aAAa;CAClC,MAAM,gBAAgB,kBAAkB;CACxC,MAAM,SAAS,eAAe,GAAG,cAAc;CAC/C,MAAM,EAAE,qBAAqB,oBAAoB,oBAAoB;CACrE,MAAM,EAAE,oBAAoB,sBAAsB;CAClD,MAAM,EAAE,aAAa,iBAAiB;CAItC,MAAM,EAAE,gBAAgB,WAAW,4BACjC,iBAAiB;CAEnB,gBAAgB;EAGd,MAAM,EAAE,WAAW,GAAG,sBADH,gCAAgC,EAAE,UAAU,CACT;;;;;;;EAQtD,MAAM,wBAAwB,YAAY;GACxC,IAAI,WACF,IAAI;IACF,MAAM,mBAAmB,MAAM,gBAAgB,EAC7C,OAAO,WACR,CAAC;IACF,IAAI,iBAAiB,WAAW,WAAW;KACzC,MAAM,WAAW;MACf,SAAS,iBAAiB;MAC1B,WAAW,iBAAiB;MAC7B;KACD,wBAAwB,EAAE,WAAW,CAAC;KACtC,oBAAoB,SAAS;KAC7B,gBAAgB,SAAS;;YAEpB,GAAG;;EAMhB,wBAAwB,kBAAkB;EAC1C,uBAAuB;IACtB;EACD;EACA;EACA;EACA;EACA;EACD,CAAC;CAGF,gBAAgB;EAEd,MAAM,MAAM,IAAI,IAAI,OAAO,SAAgB;EAC3C,cAAc,SAAS,KAAK,WAAW;GACrC,MAAM,QAAQ,eAAe,IAAI,CAAC;GAClC,IAAI,UAAU,IAAI,IAAI,OACpB,IAAI,aAAa,IAAI,KAAK,MAAM,UAAU,CAAC;QACtC,IAAI,IAAI,aAAa,IAAI,IAAI,IAAI,CAAC,OACvC,IAAI,aAAa,OAAO,IAAI;IAE9B;EACF,IAAI,aAAa,MAAM;EACvB,OAAO,QAAQ,aAAa,OAAO,QAAQ,OAAO,IAAI,IAAI;IACzD;EAAC;EAAU;EAAe;EAAQ;EAAW;EAAe,CAAC;CAEhE,OAAO"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createFormStore.js","names":[],"sources":["../../../../src/stores/form/createFormStore.ts"],"sourcesContent":["import type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\n\nimport type {\n DefaultValues,\n FormFieldArray,\n FormFieldNames,\n FormValueControl,\n FormValues,\n FormValuesState,\n} from './types.js'\n\nexport const formDefaultValues: DefaultValues = {\n fromAmount: '',\n toAmount: '',\n tokenSearchFilter: '',\n}\n\nconst defaultValueToFormValue = <T>(value: T): FormValueControl<T> => ({\n isTouched: false,\n isDirty: false,\n value,\n})\n\nconst valuesToFormValues = (defaultValues: DefaultValues): FormValues => {\n return (Object.keys(defaultValues) as FormFieldNames[]).reduce(\n (accum, key) => {\n accum[key] = defaultValueToFormValue(defaultValues[key]) as never\n return accum\n },\n {} as FormValues\n )\n}\n\nconst isString = (str: any) => typeof str === 'string' || str instanceof String\n\nconst getUpdatedTouchedFields = (userValues: FormValues) => {\n return (Object.keys(userValues) as FormFieldNames[]).reduce(\n (accum, key) => {\n if (userValues[key]?.isTouched) {\n accum[key] = true\n }\n return accum\n },\n {} as Record<FormFieldNames, boolean>\n )\n}\n\nconst mergeDefaultFormValues = (\n userValues: FormValues,\n defaultValues: FormValues\n) =>\n (Object.keys(defaultValues) as FormFieldNames[]).reduce<FormValues>(\n (accum, key) => {\n const formValue = {\n isTouched: !!(\n userValues[key]?.isTouched || defaultValues[key]?.isTouched\n ),\n isDirty: !!(userValues[key]?.isDirty || defaultValues[key]?.isTouched),\n value:\n userValues[key]?.value || Number.isFinite(userValues[key]?.value)\n ? userValues[key]?.value\n : defaultValues[key]?.value,\n }\n accum[key] = formValue as never\n return accum\n },\n { ...valuesToFormValues(formDefaultValues) }\n )\n\nexport const createFormStore = (\n defaultValues?: DefaultValues\n): UseBoundStore<StoreApi<FormValuesState>> =>\n create<FormValuesState>((set, get) => {\n const _defaultValues = valuesToFormValues({\n ...formDefaultValues,\n ...defaultValues,\n })\n return {\n defaultValues: _defaultValues,\n userValues: _defaultValues,\n touchedFields: {},\n isValid: true,\n isValidating: false,\n errors: {},\n validation: {},\n setDefaultValues: (defaultValue) => {\n const defaultFormValues = valuesToFormValues(defaultValue)\n set((state) => ({\n defaultValues: defaultFormValues,\n userValues: mergeDefaultFormValues(\n state.userValues,\n defaultFormValues\n ),\n }))\n },\n setUserAndDefaultValues: (formValues) => {\n const currentUserValues = get().userValues\n ;(Object.keys(formValues) as FormFieldNames[]).forEach((key) => {\n if (formValues[key] !== currentUserValues[key]?.value) {\n get().resetField(key, { defaultValue: formValues[key] })\n get().setFieldValue(key, formValues[key], { isTouched: true })\n }\n })\n },\n isTouched: (fieldName: FormFieldNames) =>\n !!get().userValues[fieldName]?.isTouched,\n isDirty: (fieldName: FormFieldNames) =>\n !!get().userValues[fieldName]?.isDirty,\n setAsTouched: (fieldName: FormFieldNames) => {\n const userValues = {\n ...get().userValues,\n [fieldName]: {\n ...get().userValues[fieldName],\n isTouched: true,\n },\n }\n\n const touchedFields = getUpdatedTouchedFields(userValues)\n\n set(() => ({\n userValues,\n touchedFields,\n }))\n },\n resetField: (fieldName, { defaultValue } = {}) => {\n if (defaultValue) {\n const fieldValues = {\n ...get().defaultValues[fieldName],\n value: defaultValue,\n }\n const defaultValues = {\n ...get().defaultValues,\n [fieldName]: { ...fieldValues },\n }\n const userValues = {\n ...get().userValues,\n [fieldName]: { ...fieldValues },\n }\n const touchedFields = getUpdatedTouchedFields(userValues)\n\n set(() => {\n return {\n defaultValues,\n userValues,\n touchedFields,\n }\n })\n } else {\n const userValues = {\n ...get().userValues,\n [fieldName]: { ...get().defaultValues[fieldName] },\n }\n const touchedFields = getUpdatedTouchedFields(userValues)\n\n set(() => ({\n userValues,\n touchedFields,\n }))\n }\n },\n setFieldValue: (fieldName, value, { isDirty, isTouched } = {}) => {\n const userValues = {\n ...get().userValues,\n [fieldName]: {\n value,\n isDirty:\n isDirty === undefined\n ? get().userValues[fieldName]?.isDirty\n : isDirty,\n isTouched:\n isTouched === undefined\n ? get().userValues[fieldName]?.isTouched\n : isTouched,\n },\n }\n\n const touchedFields = getUpdatedTouchedFields(userValues)\n\n set(() => ({\n userValues,\n touchedFields,\n }))\n },\n getFieldValues: <T extends FormFieldNames[]>(...names: T) =>\n names.map((name) => get().userValues[name]?.value) as FormFieldArray<T>,\n addFieldValidation: (name, validationFn) => {\n set((state) => ({\n validation: {\n ...state.validation,\n [name]: validationFn,\n },\n }))\n },\n triggerFieldValidation: async (name) => {\n try {\n let valid = true\n set(() => ({ isValid: false, isValidating: true }))\n\n const validationFn = get().validation[name]\n\n if (validationFn) {\n const result = await validationFn(get().userValues?.[name]?.value)\n if (isString(result)) {\n valid = false\n set((state) => ({\n errors: {\n ...state.errors,\n [name]: result,\n },\n }))\n } else {\n valid = result as boolean\n if (valid) {\n get().clearErrors(name)\n }\n }\n }\n\n set(() => ({ isValid: valid, isValidating: false }))\n return valid\n } catch (err) {\n set(() => ({ isValidating: false }))\n throw err\n }\n },\n clearErrors: (name) => {\n const newErrors = { ...get().errors }\n\n delete newErrors[name]\n\n set(() => ({\n errors: newErrors,\n }))\n },\n }\n })\n"],"mappings":";;AAYA,MAAa,oBAAmC;CAC9C,YAAY;CACZ,UAAU;CACV,mBAAmB;CACpB;AAED,MAAM,2BAA8B,WAAmC;CACrE,WAAW;CACX,SAAS;CACT;CACD;AAED,MAAM,sBAAsB,kBAA6C;AACvE,QAAQ,OAAO,KAAK,cAAc,CAAsB,QACrD,OAAO,QAAQ;AACd,QAAM,OAAO,wBAAwB,cAAc,KAAK;AACxD,SAAO;IAET,EAAE,CACH;;AAGH,MAAM,YAAY,QAAa,OAAO,QAAQ,YAAY,eAAe;AAEzE,MAAM,2BAA2B,eAA2B;AAC1D,QAAQ,OAAO,KAAK,WAAW,CAAsB,QAClD,OAAO,QAAQ;AACd,MAAI,WAAW,MAAM,UACnB,OAAM,OAAO;AAEf,SAAO;IAET,EAAE,CACH;;AAGH,MAAM,0BACJ,YACA,kBAEC,OAAO,KAAK,cAAc,CAAsB,QAC9C,OAAO,QAAQ;AAWd,OAAM,OAVY;EAChB,WAAW,CAAC,EACV,WAAW,MAAM,aAAa,cAAc,MAAM;EAEpD,SAAS,CAAC,EAAE,WAAW,MAAM,WAAW,cAAc,MAAM;EAC5D,OACE,WAAW,MAAM,SAAS,OAAO,SAAS,WAAW,MAAM,MAAM,GAC7D,WAAW,MAAM,QACjB,cAAc,MAAM;EAC3B;AAED,QAAO;GAET,EAAE,GAAG,mBAAmB,kBAAkB,EAAE,CAC7C;AAEH,MAAa,mBACX,kBAEA,QAAyB,KAAK,QAAQ;CACpC,MAAM,iBAAiB,mBAAmB;EACxC,GAAG;EACH,GAAG;EACJ,CAAC;AACF,QAAO;EACL,eAAe;EACf,YAAY;EACZ,eAAe,EAAE;EACjB,SAAS;EACT,cAAc;EACd,QAAQ,EAAE;EACV,YAAY,EAAE;EACd,mBAAmB,iBAAiB;GAClC,MAAM,oBAAoB,mBAAmB,aAAa;AAC1D,QAAK,WAAW;IACd,eAAe;IACf,YAAY,uBACV,MAAM,YACN,kBACD;IACF,EAAE;;EAEL,0BAA0B,eAAe;GACvC,MAAM,oBAAoB,KAAK,CAAC;AAC9B,UAAO,KAAK,WAAW,CAAsB,SAAS,QAAQ;AAC9D,QAAI,WAAW,SAAS,kBAAkB,MAAM,OAAO;AACrD,UAAK,CAAC,WAAW,KAAK,EAAE,cAAc,WAAW,MAAM,CAAC;AACxD,UAAK,CAAC,cAAc,KAAK,WAAW,MAAM,EAAE,WAAW,MAAM,CAAC;;KAEhE;;EAEJ,YAAY,cACV,CAAC,CAAC,KAAK,CAAC,WAAW,YAAY;EACjC,UAAU,cACR,CAAC,CAAC,KAAK,CAAC,WAAW,YAAY;EACjC,eAAe,cAA8B;GAC3C,MAAM,aAAa;IACjB,GAAG,KAAK,CAAC;KACR,YAAY;KACX,GAAG,KAAK,CAAC,WAAW;KACpB,WAAW;KACZ;IACF;GAED,MAAM,gBAAgB,wBAAwB,WAAW;AAEzD,cAAW;IACT;IACA;IACD,EAAE;;EAEL,aAAa,WAAW,EAAE,iBAAiB,EAAE,KAAK;AAChD,OAAI,cAAc;IAChB,MAAM,cAAc;KAClB,GAAG,KAAK,CAAC,cAAc;KACvB,OAAO;KACR;IACD,MAAM,gBAAgB;KACpB,GAAG,KAAK,CAAC;MACR,YAAY,EAAE,GAAG,aAAa;KAChC;IACD,MAAM,aAAa;KACjB,GAAG,KAAK,CAAC;MACR,YAAY,EAAE,GAAG,aAAa;KAChC;IACD,MAAM,gBAAgB,wBAAwB,WAAW;AAEzD,cAAU;AACR,YAAO;MACL;MACA;MACA;MACD;MACD;UACG;IACL,MAAM,aAAa;KACjB,GAAG,KAAK,CAAC;MACR,YAAY,EAAE,GAAG,KAAK,CAAC,cAAc,YAAY;KACnD;IACD,MAAM,gBAAgB,wBAAwB,WAAW;AAEzD,eAAW;KACT;KACA;KACD,EAAE;;;EAGP,gBAAgB,WAAW,OAAO,EAAE,SAAS,cAAc,EAAE,KAAK;GAChE,MAAM,aAAa;IACjB,GAAG,KAAK,CAAC;KACR,YAAY;KACX;KACA,SACE,YAAY,KAAA,IACR,KAAK,CAAC,WAAW,YAAY,UAC7B;KACN,WACE,cAAc,KAAA,IACV,KAAK,CAAC,WAAW,YAAY,YAC7B;KACP;IACF;GAED,MAAM,gBAAgB,wBAAwB,WAAW;AAEzD,cAAW;IACT;IACA;IACD,EAAE;;EAEL,iBAA6C,GAAG,UAC9C,MAAM,KAAK,SAAS,KAAK,CAAC,WAAW,OAAO,MAAM;EACpD,qBAAqB,MAAM,iBAAiB;AAC1C,QAAK,WAAW,EACd,YAAY;IACV,GAAG,MAAM;KACR,OAAO;IACT,EACF,EAAE;;EAEL,wBAAwB,OAAO,SAAS;AACtC,OAAI;IACF,IAAI,QAAQ;AACZ,eAAW;KAAE,SAAS;KAAO,cAAc;KAAM,EAAE;IAEnD,MAAM,eAAe,KAAK,CAAC,WAAW;AAEtC,QAAI,cAAc;KAChB,MAAM,SAAS,MAAM,aAAa,KAAK,CAAC,aAAa,OAAO,MAAM;AAClE,SAAI,SAAS,OAAO,EAAE;AACpB,cAAQ;AACR,WAAK,WAAW,EACd,QAAQ;OACN,GAAG,MAAM;QACR,OAAO;OACT,EACF,EAAE;YACE;AACL,cAAQ;AACR,UAAI,MACF,MAAK,CAAC,YAAY,KAAK;;;AAK7B,eAAW;KAAE,SAAS;KAAO,cAAc;KAAO,EAAE;AACpD,WAAO;YACA,KAAK;AACZ,eAAW,EAAE,cAAc,OAAO,EAAE;AACpC,UAAM;;;EAGV,cAAc,SAAS;GACrB,MAAM,YAAY,EAAE,GAAG,KAAK,CAAC,QAAQ;AAErC,UAAO,UAAU;AAEjB,cAAW,EACT,QAAQ,WACT,EAAE;;EAEN;EACD"}
|
|
1
|
+
{"version":3,"file":"createFormStore.js","names":[],"sources":["../../../../src/stores/form/createFormStore.ts"],"sourcesContent":["import type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\n\nimport type {\n DefaultValues,\n FormFieldArray,\n FormFieldNames,\n FormValueControl,\n FormValues,\n FormValuesState,\n} from './types.js'\n\nexport const formDefaultValues: DefaultValues = {\n fromAmount: '',\n toAmount: '',\n tokenSearchFilter: '',\n}\n\nconst defaultValueToFormValue = <T>(value: T): FormValueControl<T> => ({\n isTouched: false,\n isDirty: false,\n value,\n})\n\nconst valuesToFormValues = (defaultValues: DefaultValues): FormValues => {\n return (Object.keys(defaultValues) as FormFieldNames[]).reduce(\n (accum, key) => {\n accum[key] = defaultValueToFormValue(defaultValues[key]) as never\n return accum\n },\n {} as FormValues\n )\n}\n\nconst isString = (str: any) => typeof str === 'string' || str instanceof String\n\nconst getUpdatedTouchedFields = (userValues: FormValues) => {\n return (Object.keys(userValues) as FormFieldNames[]).reduce(\n (accum, key) => {\n if (userValues[key]?.isTouched) {\n accum[key] = true\n }\n return accum\n },\n {} as Record<FormFieldNames, boolean>\n )\n}\n\nconst mergeDefaultFormValues = (\n userValues: FormValues,\n defaultValues: FormValues\n) =>\n (Object.keys(defaultValues) as FormFieldNames[]).reduce<FormValues>(\n (accum, key) => {\n const formValue = {\n isTouched: !!(\n userValues[key]?.isTouched || defaultValues[key]?.isTouched\n ),\n isDirty: !!(userValues[key]?.isDirty || defaultValues[key]?.isTouched),\n value:\n userValues[key]?.value || Number.isFinite(userValues[key]?.value)\n ? userValues[key]?.value\n : defaultValues[key]?.value,\n }\n accum[key] = formValue as never\n return accum\n },\n { ...valuesToFormValues(formDefaultValues) }\n )\n\nexport const createFormStore = (\n defaultValues?: DefaultValues\n): UseBoundStore<StoreApi<FormValuesState>> =>\n create<FormValuesState>((set, get) => {\n const _defaultValues = valuesToFormValues({\n ...formDefaultValues,\n ...defaultValues,\n })\n return {\n defaultValues: _defaultValues,\n userValues: _defaultValues,\n touchedFields: {},\n isValid: true,\n isValidating: false,\n errors: {},\n validation: {},\n setDefaultValues: (defaultValue) => {\n const defaultFormValues = valuesToFormValues(defaultValue)\n set((state) => ({\n defaultValues: defaultFormValues,\n userValues: mergeDefaultFormValues(\n state.userValues,\n defaultFormValues\n ),\n }))\n },\n setUserAndDefaultValues: (formValues) => {\n const currentUserValues = get().userValues\n ;(Object.keys(formValues) as FormFieldNames[]).forEach((key) => {\n if (formValues[key] !== currentUserValues[key]?.value) {\n get().resetField(key, { defaultValue: formValues[key] })\n get().setFieldValue(key, formValues[key], { isTouched: true })\n }\n })\n },\n isTouched: (fieldName: FormFieldNames) =>\n !!get().userValues[fieldName]?.isTouched,\n isDirty: (fieldName: FormFieldNames) =>\n !!get().userValues[fieldName]?.isDirty,\n setAsTouched: (fieldName: FormFieldNames) => {\n const userValues = {\n ...get().userValues,\n [fieldName]: {\n ...get().userValues[fieldName],\n isTouched: true,\n },\n }\n\n const touchedFields = getUpdatedTouchedFields(userValues)\n\n set(() => ({\n userValues,\n touchedFields,\n }))\n },\n resetField: (fieldName, { defaultValue } = {}) => {\n if (defaultValue) {\n const fieldValues = {\n ...get().defaultValues[fieldName],\n value: defaultValue,\n }\n const defaultValues = {\n ...get().defaultValues,\n [fieldName]: { ...fieldValues },\n }\n const userValues = {\n ...get().userValues,\n [fieldName]: { ...fieldValues },\n }\n const touchedFields = getUpdatedTouchedFields(userValues)\n\n set(() => {\n return {\n defaultValues,\n userValues,\n touchedFields,\n }\n })\n } else {\n const userValues = {\n ...get().userValues,\n [fieldName]: { ...get().defaultValues[fieldName] },\n }\n const touchedFields = getUpdatedTouchedFields(userValues)\n\n set(() => ({\n userValues,\n touchedFields,\n }))\n }\n },\n setFieldValue: (fieldName, value, { isDirty, isTouched } = {}) => {\n const userValues = {\n ...get().userValues,\n [fieldName]: {\n value,\n isDirty:\n isDirty === undefined\n ? get().userValues[fieldName]?.isDirty\n : isDirty,\n isTouched:\n isTouched === undefined\n ? get().userValues[fieldName]?.isTouched\n : isTouched,\n },\n }\n\n const touchedFields = getUpdatedTouchedFields(userValues)\n\n set(() => ({\n userValues,\n touchedFields,\n }))\n },\n getFieldValues: <T extends FormFieldNames[]>(...names: T) =>\n names.map((name) => get().userValues[name]?.value) as FormFieldArray<T>,\n addFieldValidation: (name, validationFn) => {\n set((state) => ({\n validation: {\n ...state.validation,\n [name]: validationFn,\n },\n }))\n },\n triggerFieldValidation: async (name) => {\n try {\n let valid = true\n set(() => ({ isValid: false, isValidating: true }))\n\n const validationFn = get().validation[name]\n\n if (validationFn) {\n const result = await validationFn(get().userValues?.[name]?.value)\n if (isString(result)) {\n valid = false\n set((state) => ({\n errors: {\n ...state.errors,\n [name]: result,\n },\n }))\n } else {\n valid = result as boolean\n if (valid) {\n get().clearErrors(name)\n }\n }\n }\n\n set(() => ({ isValid: valid, isValidating: false }))\n return valid\n } catch (err) {\n set(() => ({ isValidating: false }))\n throw err\n }\n },\n clearErrors: (name) => {\n const newErrors = { ...get().errors }\n\n delete newErrors[name]\n\n set(() => ({\n errors: newErrors,\n }))\n },\n }\n })\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getDefaultValuesFromQueryString.js","names":[],"sources":["../../../../src/stores/form/getDefaultValuesFromQueryString.ts"],"sourcesContent":["import { formatInputAmount } from '../../utils/format.js'\nimport type { DefaultValues } from './types.js'\n\ninterface GetDefaultValuesFromQueryStringOptions {\n includeToAddress?: boolean\n buildUrl?: boolean\n}\n\nexport const getDefaultValuesFromQueryString = ({\n buildUrl = false,\n includeToAddress = true,\n}: GetDefaultValuesFromQueryStringOptions): Partial<DefaultValues> => {\n if (typeof window === 'undefined') {\n return {}\n }\n\n if (!buildUrl) {\n return {}\n }\n\n const searchParams = Object.fromEntries(\n new URLSearchParams(window.location.search)\n )\n\n // Prevent using fromToken/toToken params if chain is not selected.\n ;(['from', 'to'] as const).forEach((key) => {\n if (searchParams[`${key}Token`] && !searchParams[`${key}Chain`]) {\n delete searchParams[`${key}Token`]\n }\n })\n\n return {\n ...(Number.isFinite(Number.parseInt(searchParams.fromChain, 10))\n ? { fromChain: Number.parseInt(searchParams.fromChain, 10) }\n : {}),\n ...(Number.isFinite(Number.parseInt(searchParams.toChain, 10))\n ? { toChain: Number.parseInt(searchParams.toChain, 10) }\n : {}),\n ...(searchParams.fromToken ? { fromToken: searchParams.fromToken } : {}),\n ...(searchParams.toToken ? { toToken: searchParams.toToken } : {}),\n ...(Number.isFinite(Number.parseFloat(searchParams.fromAmount))\n ? { fromAmount: formatInputAmount(searchParams.fromAmount) }\n : {}),\n ...(includeToAddress && searchParams.toAddress\n ? { toAddress: searchParams.toAddress }\n : {}),\n }\n}\n"],"mappings":";;AAQA,MAAa,mCAAmC,EAC9C,WAAW,OACX,mBAAmB,WACiD;
|
|
1
|
+
{"version":3,"file":"getDefaultValuesFromQueryString.js","names":[],"sources":["../../../../src/stores/form/getDefaultValuesFromQueryString.ts"],"sourcesContent":["import { formatInputAmount } from '../../utils/format.js'\nimport type { DefaultValues } from './types.js'\n\ninterface GetDefaultValuesFromQueryStringOptions {\n includeToAddress?: boolean\n buildUrl?: boolean\n}\n\nexport const getDefaultValuesFromQueryString = ({\n buildUrl = false,\n includeToAddress = true,\n}: GetDefaultValuesFromQueryStringOptions): Partial<DefaultValues> => {\n if (typeof window === 'undefined') {\n return {}\n }\n\n if (!buildUrl) {\n return {}\n }\n\n const searchParams = Object.fromEntries(\n new URLSearchParams(window.location.search)\n )\n\n // Prevent using fromToken/toToken params if chain is not selected.\n ;(['from', 'to'] as const).forEach((key) => {\n if (searchParams[`${key}Token`] && !searchParams[`${key}Chain`]) {\n delete searchParams[`${key}Token`]\n }\n })\n\n return {\n ...(Number.isFinite(Number.parseInt(searchParams.fromChain, 10))\n ? { fromChain: Number.parseInt(searchParams.fromChain, 10) }\n : {}),\n ...(Number.isFinite(Number.parseInt(searchParams.toChain, 10))\n ? { toChain: Number.parseInt(searchParams.toChain, 10) }\n : {}),\n ...(searchParams.fromToken ? { fromToken: searchParams.fromToken } : {}),\n ...(searchParams.toToken ? { toToken: searchParams.toToken } : {}),\n ...(Number.isFinite(Number.parseFloat(searchParams.fromAmount))\n ? { fromAmount: formatInputAmount(searchParams.fromAmount) }\n : {}),\n ...(includeToAddress && searchParams.toAddress\n ? { toAddress: searchParams.toAddress }\n : {}),\n }\n}\n"],"mappings":";;AAQA,MAAa,mCAAmC,EAC9C,WAAW,OACX,mBAAmB,WACiD;CACpE,IAAI,OAAO,WAAW,aACpB,OAAO,EAAE;CAGX,IAAI,CAAC,UACH,OAAO,EAAE;CAGX,MAAM,eAAe,OAAO,YAC1B,IAAI,gBAAgB,OAAO,SAAS,OAAO,CAC5C;CAGA,CAAE,QAAQ,KAAK,CAAW,SAAS,QAAQ;EAC1C,IAAI,aAAa,GAAG,IAAI,WAAW,CAAC,aAAa,GAAG,IAAI,SACtD,OAAO,aAAa,GAAG,IAAI;GAE7B;CAEF,OAAO;EACL,GAAI,OAAO,SAAS,OAAO,SAAS,aAAa,WAAW,GAAG,CAAC,GAC5D,EAAE,WAAW,OAAO,SAAS,aAAa,WAAW,GAAG,EAAE,GAC1D,EAAE;EACN,GAAI,OAAO,SAAS,OAAO,SAAS,aAAa,SAAS,GAAG,CAAC,GAC1D,EAAE,SAAS,OAAO,SAAS,aAAa,SAAS,GAAG,EAAE,GACtD,EAAE;EACN,GAAI,aAAa,YAAY,EAAE,WAAW,aAAa,WAAW,GAAG,EAAE;EACvE,GAAI,aAAa,UAAU,EAAE,SAAS,aAAa,SAAS,GAAG,EAAE;EACjE,GAAI,OAAO,SAAS,OAAO,WAAW,aAAa,WAAW,CAAC,GAC3D,EAAE,YAAY,kBAAkB,aAAa,WAAW,EAAE,GAC1D,EAAE;EACN,GAAI,oBAAoB,aAAa,YACjC,EAAE,WAAW,aAAa,WAAW,GACrC,EAAE;EACP"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFieldActions.js","names":[],"sources":["../../../../src/stores/form/useFieldActions.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport type { FormFieldChanged } from '../../types/events.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport type {\n DefaultValues,\n FormActions,\n FormFieldNames,\n GenericFormValue,\n SetOptions,\n} from './types.js'\nimport { useFormStore } from './useFormStore.js'\n\nexport const useFieldActions = (): FormActions => {\n const emitter = useWidgetEvents()\n const actions = useFormStore<FormActions>((store) => ({\n getFieldValues: store.getFieldValues,\n isTouched: store.isTouched,\n isDirty: store.isDirty,\n resetField: store.resetField,\n setAsTouched: store.setAsTouched,\n setDefaultValues: store.setDefaultValues,\n setFieldValue: store.setFieldValue,\n setUserAndDefaultValues: store.setUserAndDefaultValues,\n }))\n\n const setFieldValueWithEmittedEvents = useCallback(\n (\n fieldName: FormFieldNames,\n newValue: GenericFormValue,\n options?: SetOptions\n ) => {\n const oldValue = actions.getFieldValues(fieldName)[0]\n\n actions.setFieldValue(fieldName, newValue, options)\n\n if (newValue !== oldValue) {\n emitter.emit(WidgetEvent.FormFieldChanged, {\n fieldName,\n newValue,\n oldValue,\n } as FormFieldChanged)\n }\n },\n [actions, emitter]\n )\n\n const setUserAndDefaultValuesWithEmittedEvents = useCallback(\n (formValues: Partial<DefaultValues>) => {\n const formValuesKeys = Object.keys(formValues) as FormFieldNames[]\n\n const changedValues = formValuesKeys.reduce(\n (accum, fieldName) => {\n const oldValue = actions.getFieldValues(fieldName)[0]\n const newValue = formValues[fieldName]\n\n if (newValue !== oldValue) {\n accum.push({ fieldName, newValue, oldValue })\n }\n\n return accum\n },\n [] as {\n fieldName: FormFieldNames\n newValue: GenericFormValue\n oldValue: GenericFormValue\n }[]\n )\n\n actions.setUserAndDefaultValues(formValues)\n\n changedValues.forEach(({ fieldName, newValue, oldValue }) => {\n emitter.emit(WidgetEvent.FormFieldChanged, {\n fieldName,\n newValue,\n oldValue,\n } as FormFieldChanged)\n })\n },\n [actions, emitter]\n )\n\n return {\n getFieldValues: actions.getFieldValues,\n isTouched: actions.isTouched,\n isDirty: actions.isDirty,\n resetField: actions.resetField,\n setAsTouched: actions.setAsTouched,\n setDefaultValues: actions.setDefaultValues,\n setFieldValue: setFieldValueWithEmittedEvents,\n setUserAndDefaultValues: setUserAndDefaultValuesWithEmittedEvents,\n }\n}\n"],"mappings":";;;;;AAaA,MAAa,wBAAqC;CAChD,MAAM,UAAU,iBAAiB;CACjC,MAAM,UAAU,cAA2B,WAAW;EACpD,gBAAgB,MAAM;EACtB,WAAW,MAAM;EACjB,SAAS,MAAM;EACf,YAAY,MAAM;EAClB,cAAc,MAAM;EACpB,kBAAkB,MAAM;EACxB,eAAe,MAAM;EACrB,yBAAyB,MAAM;EAChC,EAAE;CAEH,MAAM,iCAAiC,aAEnC,WACA,UACA,YACG;EACH,MAAM,WAAW,QAAQ,eAAe,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"useFieldActions.js","names":[],"sources":["../../../../src/stores/form/useFieldActions.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport type { FormFieldChanged } from '../../types/events.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport type {\n DefaultValues,\n FormActions,\n FormFieldNames,\n GenericFormValue,\n SetOptions,\n} from './types.js'\nimport { useFormStore } from './useFormStore.js'\n\nexport const useFieldActions = (): FormActions => {\n const emitter = useWidgetEvents()\n const actions = useFormStore<FormActions>((store) => ({\n getFieldValues: store.getFieldValues,\n isTouched: store.isTouched,\n isDirty: store.isDirty,\n resetField: store.resetField,\n setAsTouched: store.setAsTouched,\n setDefaultValues: store.setDefaultValues,\n setFieldValue: store.setFieldValue,\n setUserAndDefaultValues: store.setUserAndDefaultValues,\n }))\n\n const setFieldValueWithEmittedEvents = useCallback(\n (\n fieldName: FormFieldNames,\n newValue: GenericFormValue,\n options?: SetOptions\n ) => {\n const oldValue = actions.getFieldValues(fieldName)[0]\n\n actions.setFieldValue(fieldName, newValue, options)\n\n if (newValue !== oldValue) {\n emitter.emit(WidgetEvent.FormFieldChanged, {\n fieldName,\n newValue,\n oldValue,\n } as FormFieldChanged)\n }\n },\n [actions, emitter]\n )\n\n const setUserAndDefaultValuesWithEmittedEvents = useCallback(\n (formValues: Partial<DefaultValues>) => {\n const formValuesKeys = Object.keys(formValues) as FormFieldNames[]\n\n const changedValues = formValuesKeys.reduce(\n (accum, fieldName) => {\n const oldValue = actions.getFieldValues(fieldName)[0]\n const newValue = formValues[fieldName]\n\n if (newValue !== oldValue) {\n accum.push({ fieldName, newValue, oldValue })\n }\n\n return accum\n },\n [] as {\n fieldName: FormFieldNames\n newValue: GenericFormValue\n oldValue: GenericFormValue\n }[]\n )\n\n actions.setUserAndDefaultValues(formValues)\n\n changedValues.forEach(({ fieldName, newValue, oldValue }) => {\n emitter.emit(WidgetEvent.FormFieldChanged, {\n fieldName,\n newValue,\n oldValue,\n } as FormFieldChanged)\n })\n },\n [actions, emitter]\n )\n\n return {\n getFieldValues: actions.getFieldValues,\n isTouched: actions.isTouched,\n isDirty: actions.isDirty,\n resetField: actions.resetField,\n setAsTouched: actions.setAsTouched,\n setDefaultValues: actions.setDefaultValues,\n setFieldValue: setFieldValueWithEmittedEvents,\n setUserAndDefaultValues: setUserAndDefaultValuesWithEmittedEvents,\n }\n}\n"],"mappings":";;;;;AAaA,MAAa,wBAAqC;CAChD,MAAM,UAAU,iBAAiB;CACjC,MAAM,UAAU,cAA2B,WAAW;EACpD,gBAAgB,MAAM;EACtB,WAAW,MAAM;EACjB,SAAS,MAAM;EACf,YAAY,MAAM;EAClB,cAAc,MAAM;EACpB,kBAAkB,MAAM;EACxB,eAAe,MAAM;EACrB,yBAAyB,MAAM;EAChC,EAAE;CAEH,MAAM,iCAAiC,aAEnC,WACA,UACA,YACG;EACH,MAAM,WAAW,QAAQ,eAAe,UAAU,CAAC;EAEnD,QAAQ,cAAc,WAAW,UAAU,QAAQ;EAEnD,IAAI,aAAa,UACf,QAAQ,KAAA,oBAAmC;GACzC;GACA;GACA;GACD,CAAqB;IAG1B,CAAC,SAAS,QAAQ,CACnB;CAED,MAAM,2CAA2C,aAC9C,eAAuC;EAGtC,MAAM,gBAFiB,OAAO,KAAK,WAEC,CAAC,QAClC,OAAO,cAAc;GACpB,MAAM,WAAW,QAAQ,eAAe,UAAU,CAAC;GACnD,MAAM,WAAW,WAAW;GAE5B,IAAI,aAAa,UACf,MAAM,KAAK;IAAE;IAAW;IAAU;IAAU,CAAC;GAG/C,OAAO;KAET,EAAE,CAKH;EAED,QAAQ,wBAAwB,WAAW;EAE3C,cAAc,SAAS,EAAE,WAAW,UAAU,eAAe;GAC3D,QAAQ,KAAA,oBAAmC;IACzC;IACA;IACA;IACD,CAAqB;IACtB;IAEJ,CAAC,SAAS,QAAQ,CACnB;CAED,OAAO;EACL,gBAAgB,QAAQ;EACxB,WAAW,QAAQ;EACnB,SAAS,QAAQ;EACjB,YAAY,QAAQ;EACpB,cAAc,QAAQ;EACtB,kBAAkB,QAAQ;EAC1B,eAAe;EACf,yBAAyB;EAC1B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFieldValues.js","names":[],"sources":["../../../../src/stores/form/useFieldValues.ts"],"sourcesContent":["import type { FormFieldArray, FormFieldNames } from './types.js'\nimport { useFormStore } from './useFormStore.js'\n\n// We should return a strongly-typed array based on the specific field names we pass to the function.\nexport const useFieldValues = <T extends FormFieldNames[]>(\n ...names: T\n): FormFieldArray<T> => {\n const values = useFormStore(\n (store) =>\n names.map((name) => store.userValues[name]?.value) as FormFieldArray<T>\n )\n\n return values\n}\n"],"mappings":";;AAIA,MAAa,kBACX,GAAG,UACmB;
|
|
1
|
+
{"version":3,"file":"useFieldValues.js","names":[],"sources":["../../../../src/stores/form/useFieldValues.ts"],"sourcesContent":["import type { FormFieldArray, FormFieldNames } from './types.js'\nimport { useFormStore } from './useFormStore.js'\n\n// We should return a strongly-typed array based on the specific field names we pass to the function.\nexport const useFieldValues = <T extends FormFieldNames[]>(\n ...names: T\n): FormFieldArray<T> => {\n const values = useFormStore(\n (store) =>\n names.map((name) => store.userValues[name]?.value) as FormFieldArray<T>\n )\n\n return values\n}\n"],"mappings":";;AAIA,MAAa,kBACX,GAAG,UACmB;CAMtB,OALe,cACZ,UACC,MAAM,KAAK,SAAS,MAAM,WAAW,OAAO,MAAM,CAGzC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormRef.js","names":[],"sources":["../../../../src/stores/form/useFormRef.ts"],"sourcesContent":["import { useImperativeHandle } from 'react'\nimport { widgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport { formDefaultValues } from '../../stores/form/createFormStore.js'\nimport type { FormFieldChanged } from '../../types/events.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport type { FormRef } from '../../types/widget.js'\nimport type {\n FormFieldNames,\n FormStoreStore,\n GenericFormValue,\n} from './types.js'\n\nexport const useFormRef = (\n formStore: FormStoreStore,\n formRef?: FormRef\n): void => {\n const { setSelectedBookmark } = useBookmarkActions()\n\n useImperativeHandle(formRef, () => {\n const sanitizeValue: {\n [key: string]: (value: any) => GenericFormValue\n } = {\n fromAmount: (value) =>\n (typeof value === 'number' ? value?.toPrecision() : value) ||\n formDefaultValues.fromAmount,\n toAmount: (value) =>\n (typeof value === 'number' ? value?.toPrecision() : value) ||\n formDefaultValues.toAmount,\n toAddress: (value) => {\n const isToAddressObj = typeof value !== 'string'\n\n const address =\n (isToAddressObj ? value?.address : value) ||\n formDefaultValues.toAddress\n\n // we can assume that the toAddress has been passed as ToAddress object\n // and display it accordingly - this ensures that if a name is included\n // that it is displayed in the Send To Wallet form field correctly\n if (isToAddressObj) {\n setSelectedBookmark(value)\n }\n\n return address\n },\n }\n\n return {\n setFieldValue: (fieldName, value, options) => {\n const sanitizedValue = (\n sanitizeValue[fieldName] ? sanitizeValue[fieldName](value) : value\n ) as GenericFormValue\n\n const fieldValueOptions = options?.setUrlSearchParam\n ? { isTouched: options?.setUrlSearchParam }\n : undefined\n\n const oldValue = formStore\n .getState()\n .getFieldValues(fieldName as FormFieldNames)[0]\n\n formStore\n .getState()\n .setFieldValue(fieldName, sanitizedValue, fieldValueOptions)\n\n if (sanitizedValue !== oldValue) {\n widgetEvents.emit(WidgetEvent.FormFieldChanged, {\n fieldName,\n newValue: sanitizedValue,\n oldValue,\n } as FormFieldChanged)\n }\n },\n }\n }, [formStore, setSelectedBookmark])\n}\n"],"mappings":";;;;;;AAaA,MAAa,cACX,WACA,YACS;CACT,MAAM,EAAE,wBAAwB,oBAAoB;
|
|
1
|
+
{"version":3,"file":"useFormRef.js","names":[],"sources":["../../../../src/stores/form/useFormRef.ts"],"sourcesContent":["import { useImperativeHandle } from 'react'\nimport { widgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useBookmarkActions } from '../../stores/bookmarks/useBookmarkActions.js'\nimport { formDefaultValues } from '../../stores/form/createFormStore.js'\nimport type { FormFieldChanged } from '../../types/events.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport type { FormRef } from '../../types/widget.js'\nimport type {\n FormFieldNames,\n FormStoreStore,\n GenericFormValue,\n} from './types.js'\n\nexport const useFormRef = (\n formStore: FormStoreStore,\n formRef?: FormRef\n): void => {\n const { setSelectedBookmark } = useBookmarkActions()\n\n useImperativeHandle(formRef, () => {\n const sanitizeValue: {\n [key: string]: (value: any) => GenericFormValue\n } = {\n fromAmount: (value) =>\n (typeof value === 'number' ? value?.toPrecision() : value) ||\n formDefaultValues.fromAmount,\n toAmount: (value) =>\n (typeof value === 'number' ? value?.toPrecision() : value) ||\n formDefaultValues.toAmount,\n toAddress: (value) => {\n const isToAddressObj = typeof value !== 'string'\n\n const address =\n (isToAddressObj ? value?.address : value) ||\n formDefaultValues.toAddress\n\n // we can assume that the toAddress has been passed as ToAddress object\n // and display it accordingly - this ensures that if a name is included\n // that it is displayed in the Send To Wallet form field correctly\n if (isToAddressObj) {\n setSelectedBookmark(value)\n }\n\n return address\n },\n }\n\n return {\n setFieldValue: (fieldName, value, options) => {\n const sanitizedValue = (\n sanitizeValue[fieldName] ? sanitizeValue[fieldName](value) : value\n ) as GenericFormValue\n\n const fieldValueOptions = options?.setUrlSearchParam\n ? { isTouched: options?.setUrlSearchParam }\n : undefined\n\n const oldValue = formStore\n .getState()\n .getFieldValues(fieldName as FormFieldNames)[0]\n\n formStore\n .getState()\n .setFieldValue(fieldName, sanitizedValue, fieldValueOptions)\n\n if (sanitizedValue !== oldValue) {\n widgetEvents.emit(WidgetEvent.FormFieldChanged, {\n fieldName,\n newValue: sanitizedValue,\n oldValue,\n } as FormFieldChanged)\n }\n },\n }\n }, [formStore, setSelectedBookmark])\n}\n"],"mappings":";;;;;;AAaA,MAAa,cACX,WACA,YACS;CACT,MAAM,EAAE,wBAAwB,oBAAoB;CAEpD,oBAAoB,eAAe;EACjC,MAAM,gBAEF;GACF,aAAa,WACV,OAAO,UAAU,WAAW,OAAO,aAAa,GAAG,UACpD,kBAAkB;GACpB,WAAW,WACR,OAAO,UAAU,WAAW,OAAO,aAAa,GAAG,UACpD,kBAAkB;GACpB,YAAY,UAAU;IACpB,MAAM,iBAAiB,OAAO,UAAU;IAExC,MAAM,WACH,iBAAiB,OAAO,UAAU,UACnC,kBAAkB;IAKpB,IAAI,gBACF,oBAAoB,MAAM;IAG5B,OAAO;;GAEV;EAED,OAAO,EACL,gBAAgB,WAAW,OAAO,YAAY;GAC5C,MAAM,iBACJ,cAAc,aAAa,cAAc,WAAW,MAAM,GAAG;GAG/D,MAAM,oBAAoB,SAAS,oBAC/B,EAAE,WAAW,SAAS,mBAAmB,GACzC,KAAA;GAEJ,MAAM,WAAW,UACd,UAAU,CACV,eAAe,UAA4B,CAAC;GAE/C,UACG,UAAU,CACV,cAAc,WAAW,gBAAgB,kBAAkB;GAE9D,IAAI,mBAAmB,UACrB,aAAa,KAAA,oBAAmC;IAC9C;IACA,UAAU;IACV;IACD,CAAqB;KAG3B;IACA,CAAC,WAAW,oBAAoB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFormStore.js","names":[],"sources":["../../../../src/stores/form/useFormStore.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { useShallow } from 'zustand/shallow'\nimport { FormStoreContext } from './FormStoreContext.js'\nimport type { FormValuesState } from './types.js'\n\nexport function useFormStore<T>(selector: (state: FormValuesState) => T): T {\n const useStore = useContext(FormStoreContext)\n\n if (!useStore) {\n throw new Error('You forgot to wrap your component in <FormStoreProvider>.')\n }\n\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;AAKA,SAAgB,aAAgB,UAA4C;CAC1E,MAAM,WAAW,WAAW,iBAAiB;
|
|
1
|
+
{"version":3,"file":"useFormStore.js","names":[],"sources":["../../../../src/stores/form/useFormStore.ts"],"sourcesContent":["import { useContext } from 'react'\nimport { useShallow } from 'zustand/shallow'\nimport { FormStoreContext } from './FormStoreContext.js'\nimport type { FormValuesState } from './types.js'\n\nexport function useFormStore<T>(selector: (state: FormValuesState) => T): T {\n const useStore = useContext(FormStoreContext)\n\n if (!useStore) {\n throw new Error('You forgot to wrap your component in <FormStoreProvider>.')\n }\n\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;AAKA,SAAgB,aAAgB,UAA4C;CAC1E,MAAM,WAAW,WAAW,iBAAiB;CAE7C,IAAI,CAAC,UACH,MAAM,IAAI,MAAM,4DAA4D;CAG9E,OAAO,SAAS,WAAW,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTouchedFields.js","names":[],"sources":["../../../../src/stores/form/useTouchedFields.ts"],"sourcesContent":["import type { TouchedFields } from './types.js'\nimport { useFormStore } from './useFormStore.js'\n\nexport const useTouchedFields = (): TouchedFields => {\n const touchedFields = useFormStore((store) => store.touchedFields)\n\n return touchedFields\n}\n"],"mappings":";;AAGA,MAAa,yBAAwC;
|
|
1
|
+
{"version":3,"file":"useTouchedFields.js","names":[],"sources":["../../../../src/stores/form/useTouchedFields.ts"],"sourcesContent":["import type { TouchedFields } from './types.js'\nimport { useFormStore } from './useFormStore.js'\n\nexport const useTouchedFields = (): TouchedFields => {\n const touchedFields = useFormStore((store) => store.touchedFields)\n\n return touchedFields\n}\n"],"mappings":";;AAGA,MAAa,yBAAwC;CAGnD,OAFsB,cAAc,UAAU,MAAM,cAEhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useHeaderStore.js","names":[],"sources":["../../../../src/stores/header/useHeaderStore.tsx"],"sourcesContent":["import { createContext, useContext, useRef } from 'react'\nimport { create } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport type { PersistStoreProviderProps } from '../types.js'\nimport type { HeaderState, HeaderStore } from './types.js'\n\nconst HeaderStoreContext = createContext<HeaderStore | null>(null)\n\nexport function HeaderStoreProvider({\n children,\n}: PersistStoreProviderProps): any {\n const storeRef = useRef<HeaderStore>(null)\n if (!storeRef.current) {\n storeRef.current = createHeaderStore()\n }\n return (\n <HeaderStoreContext.Provider value={storeRef.current}>\n {children}\n </HeaderStoreContext.Provider>\n )\n}\n\nfunction useHeaderStoreContext() {\n const useStore = useContext(HeaderStoreContext)\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${HeaderStoreProvider.name}>.`\n )\n }\n return useStore\n}\n\nexport function useHeaderStore<T>(selector: (state: HeaderState) => T): T {\n const useStore = useHeaderStoreContext()\n return useStore(useShallow(selector))\n}\n\n// We use fixed position on the header when Widget is in Full Height layout.\n// We do this to get it to work like the sticky header does in the other layout modes.\n// As the header is position fixed its not in the document flow anymore.\n// To prevent the remaining page content from appearing behind the header we need to\n// pass the headers height so that the position of the page content can be adjusted\nexport function useHeaderHeight(): any {\n const headerHeight = useHeaderStore((state) => state.headerHeight)\n\n return {\n headerHeight,\n }\n}\n\nexport function useSetHeaderHeight(): any {\n const setHeaderHeight = useHeaderStore((state) => state.setHeaderHeight)\n\n return {\n setHeaderHeight,\n }\n}\n\nconst createHeaderStore = () =>\n create<HeaderState>((set, get) => ({\n headerHeight: 108, // a basic default height\n setAction: (element) => {\n set(() => ({\n element,\n }))\n return get().removeAction\n },\n setTitle: (title) => {\n set(() => ({\n title,\n }))\n return get().removeTitle\n },\n removeAction: () => {\n set(() => ({\n element: null,\n }))\n },\n removeTitle: () => {\n set(() => ({\n title: undefined,\n }))\n },\n setHeaderHeight: (headerHeight) => {\n set(() => ({\n headerHeight,\n }))\n },\n setBackAction: (action) => {\n set(() => ({\n backAction: action,\n }))\n },\n executeBackAction: () => {\n const { backAction } = get()\n if (backAction) {\n backAction()\n set(() => ({\n backAction: undefined,\n }))\n }\n },\n }))\n"],"mappings":";;;;;AAMA,MAAM,qBAAqB,cAAkC,KAAK;AAElE,SAAgB,oBAAoB,EAClC,YACiC;CACjC,MAAM,WAAW,OAAoB,KAAK;
|
|
1
|
+
{"version":3,"file":"useHeaderStore.js","names":[],"sources":["../../../../src/stores/header/useHeaderStore.tsx"],"sourcesContent":["import { createContext, useContext, useRef } from 'react'\nimport { create } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport type { PersistStoreProviderProps } from '../types.js'\nimport type { HeaderState, HeaderStore } from './types.js'\n\nconst HeaderStoreContext = createContext<HeaderStore | null>(null)\n\nexport function HeaderStoreProvider({\n children,\n}: PersistStoreProviderProps): any {\n const storeRef = useRef<HeaderStore>(null)\n if (!storeRef.current) {\n storeRef.current = createHeaderStore()\n }\n return (\n <HeaderStoreContext.Provider value={storeRef.current}>\n {children}\n </HeaderStoreContext.Provider>\n )\n}\n\nfunction useHeaderStoreContext() {\n const useStore = useContext(HeaderStoreContext)\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${HeaderStoreProvider.name}>.`\n )\n }\n return useStore\n}\n\nexport function useHeaderStore<T>(selector: (state: HeaderState) => T): T {\n const useStore = useHeaderStoreContext()\n return useStore(useShallow(selector))\n}\n\n// We use fixed position on the header when Widget is in Full Height layout.\n// We do this to get it to work like the sticky header does in the other layout modes.\n// As the header is position fixed its not in the document flow anymore.\n// To prevent the remaining page content from appearing behind the header we need to\n// pass the headers height so that the position of the page content can be adjusted\nexport function useHeaderHeight(): any {\n const headerHeight = useHeaderStore((state) => state.headerHeight)\n\n return {\n headerHeight,\n }\n}\n\nexport function useSetHeaderHeight(): any {\n const setHeaderHeight = useHeaderStore((state) => state.setHeaderHeight)\n\n return {\n setHeaderHeight,\n }\n}\n\nconst createHeaderStore = () =>\n create<HeaderState>((set, get) => ({\n headerHeight: 108, // a basic default height\n setAction: (element) => {\n set(() => ({\n element,\n }))\n return get().removeAction\n },\n setTitle: (title) => {\n set(() => ({\n title,\n }))\n return get().removeTitle\n },\n removeAction: () => {\n set(() => ({\n element: null,\n }))\n },\n removeTitle: () => {\n set(() => ({\n title: undefined,\n }))\n },\n setHeaderHeight: (headerHeight) => {\n set(() => ({\n headerHeight,\n }))\n },\n setBackAction: (action) => {\n set(() => ({\n backAction: action,\n }))\n },\n executeBackAction: () => {\n const { backAction } = get()\n if (backAction) {\n backAction()\n set(() => ({\n backAction: undefined,\n }))\n }\n },\n }))\n"],"mappings":";;;;;AAMA,MAAM,qBAAqB,cAAkC,KAAK;AAElE,SAAgB,oBAAoB,EAClC,YACiC;CACjC,MAAM,WAAW,OAAoB,KAAK;CAC1C,IAAI,CAAC,SAAS,SACZ,SAAS,UAAU,mBAAmB;CAExC,OACE,oBAAC,mBAAmB,UAApB;EAA6B,OAAO,SAAS;EAC1C;EAC2B,CAAA;;AAIlC,SAAS,wBAAwB;CAC/B,MAAM,WAAW,WAAW,mBAAmB;CAC/C,IAAI,CAAC,UACH,MAAM,IAAI,MACR,yCAAyC,oBAAoB,KAAK,IACnE;CAEH,OAAO;;AAGT,SAAgB,eAAkB,UAAwC;CAExE,OADiB,uBACF,CAAC,WAAW,SAAS,CAAC;;AAQvC,SAAgB,kBAAuB;CAGrC,OAAO,EACL,cAHmB,gBAAgB,UAAU,MAAM,aAGvC,EACb;;AAGH,SAAgB,qBAA0B;CAGxC,OAAO,EACL,iBAHsB,gBAAgB,UAAU,MAAM,gBAGvC,EAChB;;AAGH,MAAM,0BACJ,QAAqB,KAAK,SAAS;CACjC,cAAc;CACd,YAAY,YAAY;EACtB,WAAW,EACT,SACD,EAAE;EACH,OAAO,KAAK,CAAC;;CAEf,WAAW,UAAU;EACnB,WAAW,EACT,OACD,EAAE;EACH,OAAO,KAAK,CAAC;;CAEf,oBAAoB;EAClB,WAAW,EACT,SAAS,MACV,EAAE;;CAEL,mBAAmB;EACjB,WAAW,EACT,OAAO,KAAA,GACR,EAAE;;CAEL,kBAAkB,iBAAiB;EACjC,WAAW,EACT,cACD,EAAE;;CAEL,gBAAgB,WAAW;EACzB,WAAW,EACT,YAAY,QACb,EAAE;;CAEL,yBAAyB;EACvB,MAAM,EAAE,eAAe,KAAK;EAC5B,IAAI,YAAY;GACd,YAAY;GACZ,WAAW,EACT,YAAY,KAAA,GACb,EAAE;;;CAGR,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInputModeStore.js","names":[],"sources":["../../../../src/stores/inputMode/useInputModeStore.ts"],"sourcesContent":["import type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport type { FormTypeProps } from '../form/types.js'\n\ntype InputMode = 'amount' | 'price'\n\ninterface InputModeState {\n inputMode: Record<'from' | 'to', InputMode>\n setInputMode: (formType: FormTypeProps['formType'], mode: InputMode) => void\n toggleInputMode: (formType: FormTypeProps['formType']) => void\n}\n\nexport const useInputModeStore: UseBoundStore<StoreApi<InputModeState>> =\n create<InputModeState>((set, get) => ({\n inputMode: {\n from: 'amount',\n to: 'amount',\n },\n setInputMode: (formType, mode) =>\n set((state) => ({\n inputMode: {\n ...state.inputMode,\n [formType]: mode,\n },\n })),\n toggleInputMode: (formType) => {\n const currentMode = get().inputMode[formType]\n const newMode = currentMode === 'amount' ? 'price' : 'amount'\n get().setInputMode(formType, newMode)\n },\n }))\n"],"mappings":";;AAYA,MAAa,oBACX,QAAwB,KAAK,SAAS;CACpC,WAAW;EACT,MAAM;EACN,IAAI;EACL;CACD,eAAe,UAAU,SACvB,KAAK,WAAW,EACd,WAAW;EACT,GAAG,MAAM;GACR,WAAW;EACb,EACF,EAAE;CACL,kBAAkB,aAAa;EAE7B,MAAM,UADc,KAAK,CAAC,UAAU,cACJ,WAAW,UAAU;
|
|
1
|
+
{"version":3,"file":"useInputModeStore.js","names":[],"sources":["../../../../src/stores/inputMode/useInputModeStore.ts"],"sourcesContent":["import type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport type { FormTypeProps } from '../form/types.js'\n\ntype InputMode = 'amount' | 'price'\n\ninterface InputModeState {\n inputMode: Record<'from' | 'to', InputMode>\n setInputMode: (formType: FormTypeProps['formType'], mode: InputMode) => void\n toggleInputMode: (formType: FormTypeProps['formType']) => void\n}\n\nexport const useInputModeStore: UseBoundStore<StoreApi<InputModeState>> =\n create<InputModeState>((set, get) => ({\n inputMode: {\n from: 'amount',\n to: 'amount',\n },\n setInputMode: (formType, mode) =>\n set((state) => ({\n inputMode: {\n ...state.inputMode,\n [formType]: mode,\n },\n })),\n toggleInputMode: (formType) => {\n const currentMode = get().inputMode[formType]\n const newMode = currentMode === 'amount' ? 'price' : 'amount'\n get().setInputMode(formType, newMode)\n },\n }))\n"],"mappings":";;AAYA,MAAa,oBACX,QAAwB,KAAK,SAAS;CACpC,WAAW;EACT,MAAM;EACN,IAAI;EACL;CACD,eAAe,UAAU,SACvB,KAAK,WAAW,EACd,WAAW;EACT,GAAG,MAAM;GACR,WAAW;EACb,EACF,EAAE;CACL,kBAAkB,aAAa;EAE7B,MAAM,UADc,KAAK,CAAC,UAAU,cACJ,WAAW,UAAU;EACrD,KAAK,CAAC,aAAa,UAAU,QAAQ;;CAExC,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PinnedTokensStore.js","names":[],"sources":["../../../../src/stores/pinnedTokens/PinnedTokensStore.tsx"],"sourcesContent":["import { createContext, useContext, useRef } from 'react'\nimport { useShallow } from 'zustand/shallow'\nimport type { PersistStoreProviderProps } from '../types.js'\nimport { createPinnedTokensStore } from './createPinnedTokensStore.js'\nimport type { PinnedTokensState, PinnedTokensStore } from './types.js'\n\nconst PinnedTokensStoreContext = createContext<PinnedTokensStore | null>(null)\n\nexport const PinnedTokensStoreProvider: React.FC<PersistStoreProviderProps> = ({\n children,\n ...props\n}) => {\n const storeRef = useRef<PinnedTokensStore>(null)\n\n if (!storeRef.current) {\n storeRef.current = createPinnedTokensStore(props)\n }\n\n return (\n <PinnedTokensStoreContext.Provider value={storeRef.current}>\n {children}\n </PinnedTokensStoreContext.Provider>\n )\n}\n\nexport function usePinnedTokensStore<T>(\n selector: (store: PinnedTokensState) => T\n): T {\n const useStore = useContext(PinnedTokensStoreContext)\n\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${PinnedTokensStoreProvider.name}>.`\n )\n }\n\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;AAMA,MAAM,2BAA2B,cAAwC,KAAK;AAE9E,MAAa,6BAAkE,EAC7E,UACA,GAAG,YACC;CACJ,MAAM,WAAW,OAA0B,KAAK;
|
|
1
|
+
{"version":3,"file":"PinnedTokensStore.js","names":[],"sources":["../../../../src/stores/pinnedTokens/PinnedTokensStore.tsx"],"sourcesContent":["import { createContext, useContext, useRef } from 'react'\nimport { useShallow } from 'zustand/shallow'\nimport type { PersistStoreProviderProps } from '../types.js'\nimport { createPinnedTokensStore } from './createPinnedTokensStore.js'\nimport type { PinnedTokensState, PinnedTokensStore } from './types.js'\n\nconst PinnedTokensStoreContext = createContext<PinnedTokensStore | null>(null)\n\nexport const PinnedTokensStoreProvider: React.FC<PersistStoreProviderProps> = ({\n children,\n ...props\n}) => {\n const storeRef = useRef<PinnedTokensStore>(null)\n\n if (!storeRef.current) {\n storeRef.current = createPinnedTokensStore(props)\n }\n\n return (\n <PinnedTokensStoreContext.Provider value={storeRef.current}>\n {children}\n </PinnedTokensStoreContext.Provider>\n )\n}\n\nexport function usePinnedTokensStore<T>(\n selector: (store: PinnedTokensState) => T\n): T {\n const useStore = useContext(PinnedTokensStoreContext)\n\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${PinnedTokensStoreProvider.name}>.`\n )\n }\n\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;AAMA,MAAM,2BAA2B,cAAwC,KAAK;AAE9E,MAAa,6BAAkE,EAC7E,UACA,GAAG,YACC;CACJ,MAAM,WAAW,OAA0B,KAAK;CAEhD,IAAI,CAAC,SAAS,SACZ,SAAS,UAAU,wBAAwB,MAAM;CAGnD,OACE,oBAAC,yBAAyB,UAA1B;EAAmC,OAAO,SAAS;EAChD;EACiC,CAAA;;AAIxC,SAAgB,qBACd,UACG;CACH,MAAM,WAAW,WAAW,yBAAyB;CAErD,IAAI,CAAC,UACH,MAAM,IAAI,MACR,yCAAyC,0BAA0B,KAAK,IACzE;CAGH,OAAO,SAAS,WAAW,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createPinnedTokensStore.js","names":[],"sources":["../../../../src/stores/pinnedTokens/createPinnedTokensStore.ts"],"sourcesContent":["import type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport type { PersistStoreProps } from '../types.js'\nimport type { PinnedTokensState } from './types.js'\n\nexport const createPinnedTokensStore = ({\n namePrefix,\n}: PersistStoreProps): UseBoundStore<StoreApi<PinnedTokensState>> =>\n create<PinnedTokensState>()(\n persist(\n (set, get) => ({\n pinnedTokens: {},\n pinToken: (chainId: number, tokenAddress: string) => {\n set((state) => {\n const normalizedAddress = tokenAddress.toLowerCase()\n const chainTokens = state.pinnedTokens[chainId] || []\n if (!chainTokens.includes(normalizedAddress)) {\n return {\n pinnedTokens: {\n ...state.pinnedTokens,\n [chainId]: [...chainTokens, normalizedAddress],\n },\n }\n }\n return state\n })\n },\n unpinToken: (chainId: number, tokenAddress: string) => {\n set((state) => {\n const normalizedAddress = tokenAddress.toLowerCase()\n const chainTokens = state.pinnedTokens[chainId] || []\n if (chainTokens.includes(normalizedAddress)) {\n return {\n pinnedTokens: {\n ...state.pinnedTokens,\n [chainId]: chainTokens.filter(\n (addr) => addr !== normalizedAddress\n ),\n },\n }\n }\n return state\n })\n },\n isPinned: (chainId: number, tokenAddress: string) => {\n const normalizedAddress = tokenAddress.toLowerCase()\n const chainTokens = get().pinnedTokens[chainId] || []\n return chainTokens.includes(normalizedAddress)\n },\n getPinnedTokens: (chainId: number) => {\n return get().pinnedTokens[chainId] || []\n },\n getAllPinnedTokens: () => {\n const allPinned: Array<{ chainId: number; tokenAddress: string }> = []\n const pinnedTokens = get().pinnedTokens\n Object.entries(pinnedTokens).forEach(([chainIdStr, addresses]) => {\n const chainId = Number.parseInt(chainIdStr, 10)\n addresses.forEach((address) => {\n allPinned.push({ chainId, tokenAddress: address })\n })\n })\n return allPinned\n },\n }),\n {\n name: `${namePrefix || 'li.fi'}-pinned-tokens`,\n version: 0,\n partialize: (state) => ({\n pinnedTokens: state.pinnedTokens,\n }),\n }\n )\n )\n"],"mappings":";;;AAMA,MAAa,2BAA2B,EACtC,iBAEA,QAA2B,CACzB,SACG,KAAK,SAAS;CACb,cAAc,EAAE;CAChB,WAAW,SAAiB,iBAAyB;
|
|
1
|
+
{"version":3,"file":"createPinnedTokensStore.js","names":[],"sources":["../../../../src/stores/pinnedTokens/createPinnedTokensStore.ts"],"sourcesContent":["import type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport type { PersistStoreProps } from '../types.js'\nimport type { PinnedTokensState } from './types.js'\n\nexport const createPinnedTokensStore = ({\n namePrefix,\n}: PersistStoreProps): UseBoundStore<StoreApi<PinnedTokensState>> =>\n create<PinnedTokensState>()(\n persist(\n (set, get) => ({\n pinnedTokens: {},\n pinToken: (chainId: number, tokenAddress: string) => {\n set((state) => {\n const normalizedAddress = tokenAddress.toLowerCase()\n const chainTokens = state.pinnedTokens[chainId] || []\n if (!chainTokens.includes(normalizedAddress)) {\n return {\n pinnedTokens: {\n ...state.pinnedTokens,\n [chainId]: [...chainTokens, normalizedAddress],\n },\n }\n }\n return state\n })\n },\n unpinToken: (chainId: number, tokenAddress: string) => {\n set((state) => {\n const normalizedAddress = tokenAddress.toLowerCase()\n const chainTokens = state.pinnedTokens[chainId] || []\n if (chainTokens.includes(normalizedAddress)) {\n return {\n pinnedTokens: {\n ...state.pinnedTokens,\n [chainId]: chainTokens.filter(\n (addr) => addr !== normalizedAddress\n ),\n },\n }\n }\n return state\n })\n },\n isPinned: (chainId: number, tokenAddress: string) => {\n const normalizedAddress = tokenAddress.toLowerCase()\n const chainTokens = get().pinnedTokens[chainId] || []\n return chainTokens.includes(normalizedAddress)\n },\n getPinnedTokens: (chainId: number) => {\n return get().pinnedTokens[chainId] || []\n },\n getAllPinnedTokens: () => {\n const allPinned: Array<{ chainId: number; tokenAddress: string }> = []\n const pinnedTokens = get().pinnedTokens\n Object.entries(pinnedTokens).forEach(([chainIdStr, addresses]) => {\n const chainId = Number.parseInt(chainIdStr, 10)\n addresses.forEach((address) => {\n allPinned.push({ chainId, tokenAddress: address })\n })\n })\n return allPinned\n },\n }),\n {\n name: `${namePrefix || 'li.fi'}-pinned-tokens`,\n version: 0,\n partialize: (state) => ({\n pinnedTokens: state.pinnedTokens,\n }),\n }\n )\n )\n"],"mappings":";;;AAMA,MAAa,2BAA2B,EACtC,iBAEA,QAA2B,CACzB,SACG,KAAK,SAAS;CACb,cAAc,EAAE;CAChB,WAAW,SAAiB,iBAAyB;EACnD,KAAK,UAAU;GACb,MAAM,oBAAoB,aAAa,aAAa;GACpD,MAAM,cAAc,MAAM,aAAa,YAAY,EAAE;GACrD,IAAI,CAAC,YAAY,SAAS,kBAAkB,EAC1C,OAAO,EACL,cAAc;IACZ,GAAG,MAAM;KACR,UAAU,CAAC,GAAG,aAAa,kBAAkB;IAC/C,EACF;GAEH,OAAO;IACP;;CAEJ,aAAa,SAAiB,iBAAyB;EACrD,KAAK,UAAU;GACb,MAAM,oBAAoB,aAAa,aAAa;GACpD,MAAM,cAAc,MAAM,aAAa,YAAY,EAAE;GACrD,IAAI,YAAY,SAAS,kBAAkB,EACzC,OAAO,EACL,cAAc;IACZ,GAAG,MAAM;KACR,UAAU,YAAY,QACpB,SAAS,SAAS,kBACpB;IACF,EACF;GAEH,OAAO;IACP;;CAEJ,WAAW,SAAiB,iBAAyB;EACnD,MAAM,oBAAoB,aAAa,aAAa;EAEpD,QADoB,KAAK,CAAC,aAAa,YAAY,EAAE,EAClC,SAAS,kBAAkB;;CAEhD,kBAAkB,YAAoB;EACpC,OAAO,KAAK,CAAC,aAAa,YAAY,EAAE;;CAE1C,0BAA0B;EACxB,MAAM,YAA8D,EAAE;EACtE,MAAM,eAAe,KAAK,CAAC;EAC3B,OAAO,QAAQ,aAAa,CAAC,SAAS,CAAC,YAAY,eAAe;GAChE,MAAM,UAAU,OAAO,SAAS,YAAY,GAAG;GAC/C,UAAU,SAAS,YAAY;IAC7B,UAAU,KAAK;KAAE;KAAS,cAAc;KAAS,CAAC;KAClD;IACF;EACF,OAAO;;CAEV,GACD;CACE,MAAM,GAAG,cAAc,QAAQ;CAC/B,SAAS;CACT,aAAa,WAAW,EACtB,cAAc,MAAM,cACrB;CACF,CACF,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RouteExecutionStore.js","names":[],"sources":["../../../../src/stores/routes/RouteExecutionStore.tsx"],"sourcesContent":["import { createContext, type JSX, useContext, useRef } from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport type { PersistStoreProviderProps } from '../types.js'\nimport { createRouteExecutionStore } from './createRouteExecutionStore.js'\nimport type { RouteExecutionState } from './types.js'\n\ntype RouteExecutionStore = UseBoundStore<StoreApi<RouteExecutionState>>\n\nconst RouteExecutionStoreContext = createContext<RouteExecutionStore | null>(\n null\n)\n\nexport function RouteExecutionStoreProvider({\n children,\n ...props\n}: PersistStoreProviderProps): JSX.Element {\n const storeRef = useRef<RouteExecutionStore>(null)\n if (!storeRef.current) {\n storeRef.current = createRouteExecutionStore(props)\n }\n return (\n <RouteExecutionStoreContext.Provider value={storeRef.current}>\n {children}\n </RouteExecutionStoreContext.Provider>\n )\n}\n\nexport function useRouteExecutionStoreContext(): any {\n const useStore = useContext(RouteExecutionStoreContext)\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${RouteExecutionStoreProvider.name}>.`\n )\n }\n return useStore\n}\n\nexport function useRouteExecutionStore<T>(\n selector: (state: RouteExecutionState) => T\n): T {\n const useStore = useRouteExecutionStoreContext()\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;AASA,MAAM,6BAA6B,cACjC,KACD;AAED,SAAgB,4BAA4B,EAC1C,UACA,GAAG,SACsC;CACzC,MAAM,WAAW,OAA4B,KAAK;
|
|
1
|
+
{"version":3,"file":"RouteExecutionStore.js","names":[],"sources":["../../../../src/stores/routes/RouteExecutionStore.tsx"],"sourcesContent":["import { createContext, type JSX, useContext, useRef } from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport type { PersistStoreProviderProps } from '../types.js'\nimport { createRouteExecutionStore } from './createRouteExecutionStore.js'\nimport type { RouteExecutionState } from './types.js'\n\ntype RouteExecutionStore = UseBoundStore<StoreApi<RouteExecutionState>>\n\nconst RouteExecutionStoreContext = createContext<RouteExecutionStore | null>(\n null\n)\n\nexport function RouteExecutionStoreProvider({\n children,\n ...props\n}: PersistStoreProviderProps): JSX.Element {\n const storeRef = useRef<RouteExecutionStore>(null)\n if (!storeRef.current) {\n storeRef.current = createRouteExecutionStore(props)\n }\n return (\n <RouteExecutionStoreContext.Provider value={storeRef.current}>\n {children}\n </RouteExecutionStoreContext.Provider>\n )\n}\n\nexport function useRouteExecutionStoreContext(): any {\n const useStore = useContext(RouteExecutionStoreContext)\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${RouteExecutionStoreProvider.name}>.`\n )\n }\n return useStore\n}\n\nexport function useRouteExecutionStore<T>(\n selector: (state: RouteExecutionState) => T\n): T {\n const useStore = useRouteExecutionStoreContext()\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;AASA,MAAM,6BAA6B,cACjC,KACD;AAED,SAAgB,4BAA4B,EAC1C,UACA,GAAG,SACsC;CACzC,MAAM,WAAW,OAA4B,KAAK;CAClD,IAAI,CAAC,SAAS,SACZ,SAAS,UAAU,0BAA0B,MAAM;CAErD,OACE,oBAAC,2BAA2B,UAA5B;EAAqC,OAAO,SAAS;EAClD;EACmC,CAAA;;AAI1C,SAAgB,gCAAqC;CACnD,MAAM,WAAW,WAAW,2BAA2B;CACvD,IAAI,CAAC,UACH,MAAM,IAAI,MACR,yCAAyC,4BAA4B,KAAK,IAC3E;CAEH,OAAO;;AAGT,SAAgB,uBACd,UACG;CAEH,OADiB,+BACF,CAAC,WAAW,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createRouteExecutionStore.js","names":[],"sources":["../../../../src/stores/routes/createRouteExecutionStore.ts"],"sourcesContent":["import type { Route, RouteExtended } from '@lifi/sdk'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport { hasEnumFlag } from '../../utils/enum.js'\nimport type { PersistStoreProps } from '../types.js'\nimport type { RouteExecution, RouteExecutionState } from './types.js'\nimport { RouteExecutionStatus } from './types.js'\nimport {\n isRouteDone,\n isRouteFailed,\n isRoutePartiallyDone,\n isRouteRefunded,\n} from './utils.js'\n\nexport const createRouteExecutionStore = ({\n namePrefix,\n}: PersistStoreProps): UseBoundStore<StoreApi<RouteExecutionState>> =>\n create<RouteExecutionState>()(\n persist(\n (set, get) => ({\n routes: {},\n setExecutableRoute: (route: Route, observableRouteIds?: string[]) => {\n if (!get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n // clean previous idle routes\n Object.keys(routes)\n .filter(\n (routeId) =>\n !observableRouteIds?.includes(routeId) &&\n hasEnumFlag(\n routes[routeId]!.status,\n RouteExecutionStatus.Idle\n )\n )\n .forEach((routeId) => {\n delete routes[routeId]\n })\n routes[route.id] = {\n route,\n status: RouteExecutionStatus.Idle,\n }\n return {\n routes,\n }\n })\n }\n },\n updateRoute: (route: RouteExtended) => {\n if (get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const updatedState = {\n routes: {\n ...state.routes,\n [route.id]: { ...state.routes[route.id]!, route },\n },\n }\n const isFailed = isRouteFailed(route)\n if (isFailed) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Failed\n return updatedState\n }\n const isDone = isRouteDone(route)\n if (isDone) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Done\n if (isRoutePartiallyDone(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Partial\n } else if (isRouteRefunded(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Refunded\n }\n return updatedState\n }\n const isLoading = route.steps.some((step) => step.execution)\n if (isLoading) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Pending\n }\n return updatedState\n })\n }\n },\n deleteRoutes: (type, accountAddresses) =>\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n Object.keys(routes)\n .filter((routeId) => {\n const route = routes[routeId]\n if (\n accountAddresses &&\n !accountAddresses.includes(route?.route.fromAddress ?? '')\n ) {\n return false\n }\n return type === 'completed'\n ? hasEnumFlag(route?.status ?? 0, RouteExecutionStatus.Done)\n : type === 'failed'\n ? hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Failed\n )\n : !hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Done\n )\n })\n .forEach((routeId) => {\n delete routes[routeId]\n })\n return {\n routes,\n }\n }),\n deleteRoute: (routeId: string) => {\n if (get().routes[routeId]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n delete routes[routeId]\n return {\n routes,\n }\n })\n }\n },\n }),\n {\n name: `${namePrefix || 'li.fi'}-widget-routes`,\n // Bump version on breaking changes to the stored structure.\n version: 4,\n // Clear stored routes on any version mismatch to avoid errors from incompatible data shapes.\n migrate: () => ({ routes: {} }),\n partialize: (state) => ({ routes: state.routes }),\n merge: (persistedState: any, currentState: RouteExecutionState) => {\n const state = {\n ...currentState,\n ...persistedState,\n } as RouteExecutionState\n try {\n // Keep only the most recent 100 routes, evicting the oldest when the\n // limit is exceeded.\n const maxStoredRoutes = 100\n const allRoutes = Object.values(state.routes) as RouteExecution[]\n const storedRoutes = allRoutes\n .sort(\n (a, b) =>\n (b.route.steps[0]?.execution?.startedAt ?? 0) -\n (a.route.steps[0]?.execution?.startedAt ?? 0)\n )\n .slice(0, maxStoredRoutes)\n const keepIds = new Set(storedRoutes.map((r) => r.route.id))\n for (const id of Object.keys(state.routes)) {\n if (!keepIds.has(id)) {\n delete state.routes[id]\n }\n }\n } catch (error) {\n console.error(error)\n }\n return state\n },\n }\n )\n )\n"],"mappings":";;;;;AAeA,MAAa,6BAA6B,EACxC,iBAEA,QAA6B,CAC3B,SACG,KAAK,SAAS;CACb,QAAQ,EAAE;CACV,qBAAqB,OAAc,uBAAkC;
|
|
1
|
+
{"version":3,"file":"createRouteExecutionStore.js","names":[],"sources":["../../../../src/stores/routes/createRouteExecutionStore.ts"],"sourcesContent":["import type { Route, RouteExtended } from '@lifi/sdk'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport { hasEnumFlag } from '../../utils/enum.js'\nimport type { PersistStoreProps } from '../types.js'\nimport type { RouteExecution, RouteExecutionState } from './types.js'\nimport { RouteExecutionStatus } from './types.js'\nimport {\n isRouteDone,\n isRouteFailed,\n isRoutePartiallyDone,\n isRouteRefunded,\n} from './utils.js'\n\nexport const createRouteExecutionStore = ({\n namePrefix,\n}: PersistStoreProps): UseBoundStore<StoreApi<RouteExecutionState>> =>\n create<RouteExecutionState>()(\n persist(\n (set, get) => ({\n routes: {},\n setExecutableRoute: (route: Route, observableRouteIds?: string[]) => {\n if (!get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n // clean previous idle routes\n Object.keys(routes)\n .filter(\n (routeId) =>\n !observableRouteIds?.includes(routeId) &&\n hasEnumFlag(\n routes[routeId]!.status,\n RouteExecutionStatus.Idle\n )\n )\n .forEach((routeId) => {\n delete routes[routeId]\n })\n routes[route.id] = {\n route,\n status: RouteExecutionStatus.Idle,\n }\n return {\n routes,\n }\n })\n }\n },\n updateRoute: (route: RouteExtended) => {\n if (get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const updatedState = {\n routes: {\n ...state.routes,\n [route.id]: { ...state.routes[route.id]!, route },\n },\n }\n const isFailed = isRouteFailed(route)\n if (isFailed) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Failed\n return updatedState\n }\n const isDone = isRouteDone(route)\n if (isDone) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Done\n if (isRoutePartiallyDone(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Partial\n } else if (isRouteRefunded(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Refunded\n }\n return updatedState\n }\n const isLoading = route.steps.some((step) => step.execution)\n if (isLoading) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Pending\n }\n return updatedState\n })\n }\n },\n deleteRoutes: (type, accountAddresses) =>\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n Object.keys(routes)\n .filter((routeId) => {\n const route = routes[routeId]\n if (\n accountAddresses &&\n !accountAddresses.includes(route?.route.fromAddress ?? '')\n ) {\n return false\n }\n return type === 'completed'\n ? hasEnumFlag(route?.status ?? 0, RouteExecutionStatus.Done)\n : type === 'failed'\n ? hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Failed\n )\n : !hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Done\n )\n })\n .forEach((routeId) => {\n delete routes[routeId]\n })\n return {\n routes,\n }\n }),\n deleteRoute: (routeId: string) => {\n if (get().routes[routeId]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n delete routes[routeId]\n return {\n routes,\n }\n })\n }\n },\n }),\n {\n name: `${namePrefix || 'li.fi'}-widget-routes`,\n // Bump version on breaking changes to the stored structure.\n version: 4,\n // Clear stored routes on any version mismatch to avoid errors from incompatible data shapes.\n migrate: () => ({ routes: {} }),\n partialize: (state) => ({ routes: state.routes }),\n merge: (persistedState: any, currentState: RouteExecutionState) => {\n const state = {\n ...currentState,\n ...persistedState,\n } as RouteExecutionState\n try {\n // Keep only the most recent 100 routes, evicting the oldest when the\n // limit is exceeded.\n const maxStoredRoutes = 100\n const allRoutes = Object.values(state.routes) as RouteExecution[]\n const storedRoutes = allRoutes\n .sort(\n (a, b) =>\n (b.route.steps[0]?.execution?.startedAt ?? 0) -\n (a.route.steps[0]?.execution?.startedAt ?? 0)\n )\n .slice(0, maxStoredRoutes)\n const keepIds = new Set(storedRoutes.map((r) => r.route.id))\n for (const id of Object.keys(state.routes)) {\n if (!keepIds.has(id)) {\n delete state.routes[id]\n }\n }\n } catch (error) {\n console.error(error)\n }\n return state\n },\n }\n )\n )\n"],"mappings":";;;;;AAeA,MAAa,6BAA6B,EACxC,iBAEA,QAA6B,CAC3B,SACG,KAAK,SAAS;CACb,QAAQ,EAAE;CACV,qBAAqB,OAAc,uBAAkC;EACnE,IAAI,CAAC,KAAK,CAAC,OAAO,MAAM,KACtB,KAAK,UAA+B;GAClC,MAAM,SAAS,EAAE,GAAG,MAAM,QAAQ;GAElC,OAAO,KAAK,OAAO,CAChB,QACE,YACC,CAAC,oBAAoB,SAAS,QAAQ,IACtC,YACE,OAAO,SAAU,QAAA,EAElB,CACJ,CACA,SAAS,YAAY;IACpB,OAAO,OAAO;KACd;GACJ,OAAO,MAAM,MAAM;IACjB;IACA,QAAA;IACD;GACD,OAAO,EACL,QACD;IACD;;CAGN,cAAc,UAAyB;EACrC,IAAI,KAAK,CAAC,OAAO,MAAM,KACrB,KAAK,UAA+B;GAClC,MAAM,eAAe,EACnB,QAAQ;IACN,GAAG,MAAM;KACR,MAAM,KAAK;KAAE,GAAG,MAAM,OAAO,MAAM;KAAM;KAAO;IAClD,EACF;GAED,IADiB,cAAc,MACnB,EAAE;IACZ,aAAa,OAAO,MAAM,IAAK,SAAA;IAE/B,OAAO;;GAGT,IADe,YAAY,MACjB,EAAE;IACV,aAAa,OAAO,MAAM,IAAK,SAAA;IAE/B,IAAI,qBAAqB,MAAM,EAC7B,aAAa,OAAO,MAAM,IAAK,UAAA;SAE1B,IAAI,gBAAgB,MAAM,EAC/B,aAAa,OAAO,MAAM,IAAK,UAAA;IAGjC,OAAO;;GAGT,IADkB,MAAM,MAAM,MAAM,SAAS,KAAK,UACrC,EACX,aAAa,OAAO,MAAM,IAAK,SAAA;GAGjC,OAAO;IACP;;CAGN,eAAe,MAAM,qBACnB,KAAK,UAA+B;EAClC,MAAM,SAAS,EAAE,GAAG,MAAM,QAAQ;EAClC,OAAO,KAAK,OAAO,CAChB,QAAQ,YAAY;GACnB,MAAM,QAAQ,OAAO;GACrB,IACE,oBACA,CAAC,iBAAiB,SAAS,OAAO,MAAM,eAAe,GAAG,EAE1D,OAAO;GAET,OAAO,SAAS,cACZ,YAAY,OAAO,UAAU,GAAA,EAA6B,GAC1D,SAAS,WACP,YACE,OAAO,UAAU,GAAA,EAElB,GACD,CAAC,YACC,OAAO,UAAU,GAAA,EAElB;IACP,CACD,SAAS,YAAY;GACpB,OAAO,OAAO;IACd;EACJ,OAAO,EACL,QACD;GACD;CACJ,cAAc,YAAoB;EAChC,IAAI,KAAK,CAAC,OAAO,UACf,KAAK,UAA+B;GAClC,MAAM,SAAS,EAAE,GAAG,MAAM,QAAQ;GAClC,OAAO,OAAO;GACd,OAAO,EACL,QACD;IACD;;CAGP,GACD;CACE,MAAM,GAAG,cAAc,QAAQ;CAE/B,SAAS;CAET,gBAAgB,EAAE,QAAQ,EAAE,EAAE;CAC9B,aAAa,WAAW,EAAE,QAAQ,MAAM,QAAQ;CAChD,QAAQ,gBAAqB,iBAAsC;EACjE,MAAM,QAAQ;GACZ,GAAG;GACH,GAAG;GACJ;EACD,IAAI;GAKF,MAAM,eADY,OAAO,OAAO,MAAM,OACR,CAC3B,MACE,GAAG,OACD,EAAE,MAAM,MAAM,IAAI,WAAW,aAAa,MAC1C,EAAE,MAAM,MAAM,IAAI,WAAW,aAAa,GAC9C,CACA,MAAM,GAAG,IAAgB;GAC5B,MAAM,UAAU,IAAI,IAAI,aAAa,KAAK,MAAM,EAAE,MAAM,GAAG,CAAC;GAC5D,KAAK,MAAM,MAAM,OAAO,KAAK,MAAM,OAAO,EACxC,IAAI,CAAC,QAAQ,IAAI,GAAG,EAClB,OAAO,MAAM,OAAO;WAGjB,OAAO;GACd,QAAQ,MAAM,MAAM;;EAEtB,OAAO;;CAEV,CACF,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useIntermediateRoutesStore.js","names":[],"sources":["../../../../src/stores/routes/useIntermediateRoutesStore.ts"],"sourcesContent":["import type { Route } from '@lifi/sdk'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\n\ninterface IntermediateRoutesState {\n intermediateRoutes: Record<string, Route[] | undefined>\n setIntermediateRoutes: (\n key: readonly unknown[],\n routes: Route[] | undefined\n ) => void\n getIntermediateRoutes: (key: readonly unknown[]) => Route[] | undefined\n}\n\nexport const useIntermediateRoutesStore: UseBoundStore<\n StoreApi<IntermediateRoutesState>\n> = create<IntermediateRoutesState>((set, get) => ({\n intermediateRoutes: {},\n setIntermediateRoutes: (key, routes) => {\n const stringKey = JSON.stringify(key)\n // Create a new state with only the current key\n const newRoutesByKey: Record<string, Route[] | undefined> = {}\n newRoutesByKey[stringKey] = routes\n set({ intermediateRoutes: newRoutesByKey })\n },\n getIntermediateRoutes: (key) => {\n const stringKey = JSON.stringify(key)\n return get().intermediateRoutes[stringKey]\n },\n}))\n"],"mappings":";;AAaA,MAAa,6BAET,QAAiC,KAAK,SAAS;CACjD,oBAAoB,EAAE;CACtB,wBAAwB,KAAK,WAAW;EACtC,MAAM,YAAY,KAAK,UAAU,IAAI;EAErC,MAAM,iBAAsD,EAAE;
|
|
1
|
+
{"version":3,"file":"useIntermediateRoutesStore.js","names":[],"sources":["../../../../src/stores/routes/useIntermediateRoutesStore.ts"],"sourcesContent":["import type { Route } from '@lifi/sdk'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\n\ninterface IntermediateRoutesState {\n intermediateRoutes: Record<string, Route[] | undefined>\n setIntermediateRoutes: (\n key: readonly unknown[],\n routes: Route[] | undefined\n ) => void\n getIntermediateRoutes: (key: readonly unknown[]) => Route[] | undefined\n}\n\nexport const useIntermediateRoutesStore: UseBoundStore<\n StoreApi<IntermediateRoutesState>\n> = create<IntermediateRoutesState>((set, get) => ({\n intermediateRoutes: {},\n setIntermediateRoutes: (key, routes) => {\n const stringKey = JSON.stringify(key)\n // Create a new state with only the current key\n const newRoutesByKey: Record<string, Route[] | undefined> = {}\n newRoutesByKey[stringKey] = routes\n set({ intermediateRoutes: newRoutesByKey })\n },\n getIntermediateRoutes: (key) => {\n const stringKey = JSON.stringify(key)\n return get().intermediateRoutes[stringKey]\n },\n}))\n"],"mappings":";;AAaA,MAAa,6BAET,QAAiC,KAAK,SAAS;CACjD,oBAAoB,EAAE;CACtB,wBAAwB,KAAK,WAAW;EACtC,MAAM,YAAY,KAAK,UAAU,IAAI;EAErC,MAAM,iBAAsD,EAAE;EAC9D,eAAe,aAAa;EAC5B,IAAI,EAAE,oBAAoB,gBAAgB,CAAC;;CAE7C,wBAAwB,QAAQ;EAC9B,MAAM,YAAY,KAAK,UAAU,IAAI;EACrC,OAAO,KAAK,CAAC,mBAAmB;;CAEnC,EAAE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useRouteExecutionIndicator.js","names":[],"sources":["../../../../src/stores/routes/useRouteExecutionIndicator.ts"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport { useCallback, useMemo } from 'react'\nimport { useRouteExecutionStore } from './RouteExecutionStore.js'\nimport type { RouteExecution, RouteExecutionState } from './types.js'\nimport { RouteExecutionStatus } from './types.js'\n\nexport type RouteExecutionIndicator = {\n failed: boolean\n active: boolean\n}\n\nconst isRecentTransaction = (route: RouteExecution): boolean => {\n const startedAt = route.route.steps[0]?.execution?.startedAt ?? 0\n return startedAt > 0 && Date.now() - startedAt < 1000 * 60 * 60 * 24 // 1 day\n}\n\nexport const useRouteExecutionIndicator = (): RouteExecutionIndicator => {\n const { accounts } = useAccount()\n const accountAddresses = useMemo(\n () => accounts.map((account) => account.address),\n [accounts]\n )\n const selector = useCallback(\n (state: RouteExecutionState): RouteExecutionIndicator => {\n const routes = Object.values(state.routes) as RouteExecution[]\n const recentOwnedRoutes = routes.filter(\n (route) =>\n accountAddresses.includes(route.route.fromAddress) &&\n isRecentTransaction(route)\n )\n return {\n failed: recentOwnedRoutes.some(\n (r) => r.status === RouteExecutionStatus.Failed\n ),\n active: recentOwnedRoutes.some(\n (r) => r.status === RouteExecutionStatus.Pending\n ),\n }\n },\n [accountAddresses]\n )\n return useRouteExecutionStore(selector)\n}\n"],"mappings":";;;;AAWA,MAAM,uBAAuB,UAAmC;CAC9D,MAAM,YAAY,MAAM,MAAM,MAAM,IAAI,WAAW,aAAa;
|
|
1
|
+
{"version":3,"file":"useRouteExecutionIndicator.js","names":[],"sources":["../../../../src/stores/routes/useRouteExecutionIndicator.ts"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport { useCallback, useMemo } from 'react'\nimport { useRouteExecutionStore } from './RouteExecutionStore.js'\nimport type { RouteExecution, RouteExecutionState } from './types.js'\nimport { RouteExecutionStatus } from './types.js'\n\nexport type RouteExecutionIndicator = {\n failed: boolean\n active: boolean\n}\n\nconst isRecentTransaction = (route: RouteExecution): boolean => {\n const startedAt = route.route.steps[0]?.execution?.startedAt ?? 0\n return startedAt > 0 && Date.now() - startedAt < 1000 * 60 * 60 * 24 // 1 day\n}\n\nexport const useRouteExecutionIndicator = (): RouteExecutionIndicator => {\n const { accounts } = useAccount()\n const accountAddresses = useMemo(\n () => accounts.map((account) => account.address),\n [accounts]\n )\n const selector = useCallback(\n (state: RouteExecutionState): RouteExecutionIndicator => {\n const routes = Object.values(state.routes) as RouteExecution[]\n const recentOwnedRoutes = routes.filter(\n (route) =>\n accountAddresses.includes(route.route.fromAddress) &&\n isRecentTransaction(route)\n )\n return {\n failed: recentOwnedRoutes.some(\n (r) => r.status === RouteExecutionStatus.Failed\n ),\n active: recentOwnedRoutes.some(\n (r) => r.status === RouteExecutionStatus.Pending\n ),\n }\n },\n [accountAddresses]\n )\n return useRouteExecutionStore(selector)\n}\n"],"mappings":";;;;AAWA,MAAM,uBAAuB,UAAmC;CAC9D,MAAM,YAAY,MAAM,MAAM,MAAM,IAAI,WAAW,aAAa;CAChE,OAAO,YAAY,KAAK,KAAK,KAAK,GAAG,YAAY,MAAO,KAAK,KAAK;;AAGpE,MAAa,mCAA4D;CACvE,MAAM,EAAE,aAAa,YAAY;CACjC,MAAM,mBAAmB,cACjB,SAAS,KAAK,YAAY,QAAQ,QAAQ,EAChD,CAAC,SAAS,CACX;CAoBD,OAAO,uBAnBU,aACd,UAAwD;EAEvD,MAAM,oBADS,OAAO,OAAO,MAAM,OACH,CAAC,QAC9B,UACC,iBAAiB,SAAS,MAAM,MAAM,YAAY,IAClD,oBAAoB,MAAM,CAC7B;EACD,OAAO;GACL,QAAQ,kBAAkB,MACvB,MAAM,EAAE,WAAA,EACV;GACD,QAAQ,kBAAkB,MACvB,MAAM,EAAE,WAAA,EACV;GACF;IAEH,CAAC,iBAAiB,CAEkB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSetExecutableRoute.js","names":[],"sources":["../../../../src/stores/routes/useSetExecutableRoute.ts"],"sourcesContent":["import { useRouteExecutionStore } from './RouteExecutionStore.js'\nimport type { RouteExecutionState } from './types.js'\n\nexport const useSetExecutableRoute =\n (): RouteExecutionState['setExecutableRoute'] => {\n return useRouteExecutionStore((state) => state.setExecutableRoute)\n }\n"],"mappings":";;AAGA,MAAa,8BACsC;
|
|
1
|
+
{"version":3,"file":"useSetExecutableRoute.js","names":[],"sources":["../../../../src/stores/routes/useSetExecutableRoute.ts"],"sourcesContent":["import { useRouteExecutionStore } from './RouteExecutionStore.js'\nimport type { RouteExecutionState } from './types.js'\n\nexport const useSetExecutableRoute =\n (): RouteExecutionState['setExecutableRoute'] => {\n return useRouteExecutionStore((state) => state.setExecutableRoute)\n }\n"],"mappings":";;AAGA,MAAa,8BACsC;CAC/C,OAAO,wBAAwB,UAAU,MAAM,mBAAmB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/stores/routes/utils.ts"],"sourcesContent":["import type { ExecutionAction, RouteExtended } from '@lifi/sdk'\nimport microdiff from 'microdiff'\n\nexport const isRouteDone = (route: RouteExtended): boolean => {\n return route.steps.every((step) => step.execution?.status === 'DONE')\n}\n\nexport const isRoutePartiallyDone = (route: RouteExtended): boolean => {\n return route.steps.some((step) =>\n step.execution?.actions?.some((action) => action.substatus === 'PARTIAL')\n )\n}\n\nexport const isRouteRefunded = (route: RouteExtended): boolean => {\n return route.steps.some((step) =>\n step.execution?.actions?.some((action) => action.substatus === 'REFUNDED')\n )\n}\n\nexport const isRouteFailed = (route: RouteExtended): boolean => {\n return route.steps.some((step) => step.execution?.status === 'FAILED')\n}\n\nexport const isRouteActive = (route?: RouteExtended): boolean => {\n if (!route) {\n return false\n }\n const isDone = isRouteDone(route)\n const isFailed = isRouteFailed(route)\n const alreadyStarted = route.steps.some((step) => step.execution)\n return !isDone && !isFailed && alreadyStarted\n}\n\nexport const getUpdatedAction = (\n currentRoute: RouteExtended,\n updatedRoute: RouteExtended\n): ExecutionAction | undefined => {\n const actionDiff = microdiff(currentRoute, updatedRoute).find((diff) =>\n diff.path.includes('actions')\n )\n if (!actionDiff) {\n return undefined\n }\n // Find action index in the diff array so we can slice the complete action object\n // e.g. ['steps', 0, 'execution', 'actions', 0, 'message']\n const actionDiffIndex = actionDiff.path.indexOf('actions') + 2\n const actionPathSlice = actionDiff.path.slice(0, actionDiffIndex)\n // Reduce updated route using the diff path to get updated process\n const action = actionPathSlice.reduce(\n (obj, path) => obj[path],\n updatedRoute as any\n ) as ExecutionAction\n return action\n}\n\nexport const getSourceTxHash = (route?: RouteExtended): string | undefined => {\n const sourceAction = route?.steps[0].execution?.actions\n ?.filter(\n (action) => !['RESET_ALLOWANCE', 'SET_ALLOWANCE'].includes(action.type)\n )\n .find((action) => action.txHash || action.taskId)\n return sourceAction?.txHash || sourceAction?.taskId\n}\n"],"mappings":";;AAGA,MAAa,eAAe,UAAkC;
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../../src/stores/routes/utils.ts"],"sourcesContent":["import type { ExecutionAction, RouteExtended } from '@lifi/sdk'\nimport microdiff from 'microdiff'\n\nexport const isRouteDone = (route: RouteExtended): boolean => {\n return route.steps.every((step) => step.execution?.status === 'DONE')\n}\n\nexport const isRoutePartiallyDone = (route: RouteExtended): boolean => {\n return route.steps.some((step) =>\n step.execution?.actions?.some((action) => action.substatus === 'PARTIAL')\n )\n}\n\nexport const isRouteRefunded = (route: RouteExtended): boolean => {\n return route.steps.some((step) =>\n step.execution?.actions?.some((action) => action.substatus === 'REFUNDED')\n )\n}\n\nexport const isRouteFailed = (route: RouteExtended): boolean => {\n return route.steps.some((step) => step.execution?.status === 'FAILED')\n}\n\nexport const isRouteActive = (route?: RouteExtended): boolean => {\n if (!route) {\n return false\n }\n const isDone = isRouteDone(route)\n const isFailed = isRouteFailed(route)\n const alreadyStarted = route.steps.some((step) => step.execution)\n return !isDone && !isFailed && alreadyStarted\n}\n\nexport const getUpdatedAction = (\n currentRoute: RouteExtended,\n updatedRoute: RouteExtended\n): ExecutionAction | undefined => {\n const actionDiff = microdiff(currentRoute, updatedRoute).find((diff) =>\n diff.path.includes('actions')\n )\n if (!actionDiff) {\n return undefined\n }\n // Find action index in the diff array so we can slice the complete action object\n // e.g. ['steps', 0, 'execution', 'actions', 0, 'message']\n const actionDiffIndex = actionDiff.path.indexOf('actions') + 2\n const actionPathSlice = actionDiff.path.slice(0, actionDiffIndex)\n // Reduce updated route using the diff path to get updated process\n const action = actionPathSlice.reduce(\n (obj, path) => obj[path],\n updatedRoute as any\n ) as ExecutionAction\n return action\n}\n\nexport const getSourceTxHash = (route?: RouteExtended): string | undefined => {\n const sourceAction = route?.steps[0].execution?.actions\n ?.filter(\n (action) => !['RESET_ALLOWANCE', 'SET_ALLOWANCE'].includes(action.type)\n )\n .find((action) => action.txHash || action.taskId)\n return sourceAction?.txHash || sourceAction?.taskId\n}\n"],"mappings":";;AAGA,MAAa,eAAe,UAAkC;CAC5D,OAAO,MAAM,MAAM,OAAO,SAAS,KAAK,WAAW,WAAW,OAAO;;AAGvE,MAAa,wBAAwB,UAAkC;CACrE,OAAO,MAAM,MAAM,MAAM,SACvB,KAAK,WAAW,SAAS,MAAM,WAAW,OAAO,cAAc,UAAU,CAC1E;;AAGH,MAAa,mBAAmB,UAAkC;CAChE,OAAO,MAAM,MAAM,MAAM,SACvB,KAAK,WAAW,SAAS,MAAM,WAAW,OAAO,cAAc,WAAW,CAC3E;;AAGH,MAAa,iBAAiB,UAAkC;CAC9D,OAAO,MAAM,MAAM,MAAM,SAAS,KAAK,WAAW,WAAW,SAAS;;AAGxE,MAAa,iBAAiB,UAAmC;CAC/D,IAAI,CAAC,OACH,OAAO;CAET,MAAM,SAAS,YAAY,MAAM;CACjC,MAAM,WAAW,cAAc,MAAM;CACrC,MAAM,iBAAiB,MAAM,MAAM,MAAM,SAAS,KAAK,UAAU;CACjE,OAAO,CAAC,UAAU,CAAC,YAAY;;AAGjC,MAAa,oBACX,cACA,iBACgC;CAChC,MAAM,aAAa,UAAU,cAAc,aAAa,CAAC,MAAM,SAC7D,KAAK,KAAK,SAAS,UAAU,CAC9B;CACD,IAAI,CAAC,YACH;CAIF,MAAM,kBAAkB,WAAW,KAAK,QAAQ,UAAU,GAAG;CAO7D,OANwB,WAAW,KAAK,MAAM,GAAG,gBAEnB,CAAC,QAC5B,KAAK,SAAS,IAAI,OACnB,aAEW;;AAGf,MAAa,mBAAmB,UAA8C;CAC5E,MAAM,eAAe,OAAO,MAAM,GAAG,WAAW,SAC5C,QACC,WAAW,CAAC,CAAC,mBAAmB,gBAAgB,CAAC,SAAS,OAAO,KAAK,CACxE,CACA,MAAM,WAAW,OAAO,UAAU,OAAO,OAAO;CACnD,OAAO,cAAc,UAAU,cAAc"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SettingsStore.js","names":[],"sources":["../../../../src/stores/settings/SettingsStore.tsx"],"sourcesContent":["import {\n createContext,\n type JSX,\n type PropsWithChildren,\n useContext,\n useRef,\n} from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport { createSettingsStore } from './createSettingsStore.js'\nimport type { SettingsState, SettingsStoreProviderProps } from './types.js'\n\ntype SettingsStore = UseBoundStore<StoreApi<SettingsState>>\n\nconst SettingsStoreContext = createContext<SettingsStore | null>(null)\n\nexport const SettingsStoreProvider = ({\n children,\n config,\n}: PropsWithChildren<SettingsStoreProviderProps>): JSX.Element => {\n const storeRef = useRef<SettingsStore>(null)\n if (!storeRef.current) {\n storeRef.current = createSettingsStore(config)\n }\n return (\n <SettingsStoreContext.Provider value={storeRef.current}>\n {children}\n </SettingsStoreContext.Provider>\n )\n}\n\nexport function useSettingsStoreContext(): any {\n const useStore = useContext(SettingsStoreContext)\n if (!useStore) {\n throw new Error(\n 'You forgot to wrap your component in SettingsStoreContext.'\n )\n }\n return useStore\n}\n\nexport function useSettingsStore<T>(selector: (state: SettingsState) => T): T {\n const useStore = useSettingsStoreContext()\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;AAcA,MAAM,uBAAuB,cAAoC,KAAK;AAEtE,MAAa,yBAAyB,EACpC,UACA,aACgE;CAChE,MAAM,WAAW,OAAsB,KAAK;
|
|
1
|
+
{"version":3,"file":"SettingsStore.js","names":[],"sources":["../../../../src/stores/settings/SettingsStore.tsx"],"sourcesContent":["import {\n createContext,\n type JSX,\n type PropsWithChildren,\n useContext,\n useRef,\n} from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport { createSettingsStore } from './createSettingsStore.js'\nimport type { SettingsState, SettingsStoreProviderProps } from './types.js'\n\ntype SettingsStore = UseBoundStore<StoreApi<SettingsState>>\n\nconst SettingsStoreContext = createContext<SettingsStore | null>(null)\n\nexport const SettingsStoreProvider = ({\n children,\n config,\n}: PropsWithChildren<SettingsStoreProviderProps>): JSX.Element => {\n const storeRef = useRef<SettingsStore>(null)\n if (!storeRef.current) {\n storeRef.current = createSettingsStore(config)\n }\n return (\n <SettingsStoreContext.Provider value={storeRef.current}>\n {children}\n </SettingsStoreContext.Provider>\n )\n}\n\nexport function useSettingsStoreContext(): any {\n const useStore = useContext(SettingsStoreContext)\n if (!useStore) {\n throw new Error(\n 'You forgot to wrap your component in SettingsStoreContext.'\n )\n }\n return useStore\n}\n\nexport function useSettingsStore<T>(selector: (state: SettingsState) => T): T {\n const useStore = useSettingsStoreContext()\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;AAcA,MAAM,uBAAuB,cAAoC,KAAK;AAEtE,MAAa,yBAAyB,EACpC,UACA,aACgE;CAChE,MAAM,WAAW,OAAsB,KAAK;CAC5C,IAAI,CAAC,SAAS,SACZ,SAAS,UAAU,oBAAoB,OAAO;CAEhD,OACE,oBAAC,qBAAqB,UAAtB;EAA+B,OAAO,SAAS;EAC5C;EAC6B,CAAA;;AAIpC,SAAgB,0BAA+B;CAC7C,MAAM,WAAW,WAAW,qBAAqB;CACjD,IAAI,CAAC,UACH,MAAM,IAAI,MACR,6DACD;CAEH,OAAO;;AAGT,SAAgB,iBAAoB,UAA0C;CAE5E,OADiB,yBACF,CAAC,WAAW,SAAS,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createSettingsStore.js","names":[],"sources":["../../../../src/stores/settings/createSettingsStore.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/noUnusedVariables: allowed in this store */\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport { allLanguages } from '../../providers/I18nProvider/constants.js'\nimport { loadLocale } from '../../providers/I18nProvider/i18n.js'\nimport type { LanguageKey } from '../../providers/I18nProvider/types.js'\nimport type { WidgetConfig } from '../../types/widget.js'\nimport type { SettingsProps, SettingsState } from './types.js'\nimport { SettingsToolTypes } from './types.js'\nimport { getStateValues } from './utils/getStateValues.js'\n\nexport const defaultSlippage = undefined\n\nexport const defaultConfigurableSettings: Pick<\n SettingsState,\n 'routePriority' | 'slippage' | 'gasPrice'\n> = {\n routePriority: 'CHEAPEST',\n slippage: defaultSlippage,\n gasPrice: 'normal',\n}\n\nconst defaultSettings: SettingsProps = {\n gasPrice: 'normal',\n enabledAutoRefuel: true,\n disabledBridges: [],\n disabledExchanges: [],\n enabledBridges: [],\n enabledExchanges: [],\n _enabledBridges: {},\n _enabledExchanges: {},\n smallBalanceThreshold: undefined,\n}\n\nexport const createSettingsStore = (\n config: WidgetConfig\n): UseBoundStore<StoreApi<SettingsState>> =>\n create<SettingsState>()(\n persist(\n (set, get) => ({\n ...defaultSettings,\n setValue: (key, value) =>\n set(() => ({\n [key]: value,\n })),\n setValues: (values: Partial<SettingsProps>) =>\n set(() => ({\n ...values,\n })),\n getSettings: () => getStateValues(get()),\n getValue: (key) => get()[key],\n initializeTools: (toolType, tools, reset) => {\n if (!tools.length) {\n return\n }\n set((state) => {\n const updatedState = { ...state }\n if (!reset) {\n // Add new tools\n tools.forEach((tool) => {\n if (!Object.hasOwn(updatedState[`_enabled${toolType}`], tool)) {\n updatedState[`_enabled${toolType}`][tool] = true\n }\n })\n // Filter tools we no longer have\n updatedState[`_enabled${toolType}`] = Object.fromEntries(\n Object.entries(updatedState[`_enabled${toolType}`]).filter(\n ([key]) => tools.includes(key)\n )\n )\n } else {\n tools.forEach((tool) => {\n updatedState[`_enabled${toolType}`][tool] = true\n })\n }\n const enabledToolKeys = Object.keys(\n updatedState[`_enabled${toolType}`]\n )\n updatedState[`enabled${toolType}`] = enabledToolKeys.filter(\n (key) => updatedState[`_enabled${toolType}`][key]\n )\n updatedState[`disabled${toolType}`] = enabledToolKeys.filter(\n (key) => !updatedState[`_enabled${toolType}`][key]\n )\n return updatedState\n })\n },\n setToolValue: (toolType, tool, value) =>\n set((state) => {\n const enabledTools = {\n ...state[`_enabled${toolType}`],\n [tool]: value,\n }\n const enabledToolKeys = Object.keys(enabledTools)\n return {\n [`_enabled${toolType}`]: enabledTools,\n [`enabled${toolType}`]: enabledToolKeys.filter(\n (key) => enabledTools[key]\n ),\n [`disabled${toolType}`]: enabledToolKeys.filter(\n (key) => !enabledTools[key]\n ),\n }\n }),\n toggleToolKeys: (toolType, toolKeys) =>\n set((state) => {\n const allKeysInCollectionEnabled = toolKeys.every(\n (toolKey) => state[`_enabled${toolType}`][toolKey]\n )\n\n // then toggle those keys to false\n const updatedTools = toolKeys.reduce(\n (accum, toolKey) => {\n accum[toolKey] = !allKeysInCollectionEnabled\n return accum\n },\n {\n ...state[`_enabled${toolType}`],\n }\n )\n\n const enableKeys: string[] = []\n const disabledKeys: string[] = []\n\n Object.entries(updatedTools).forEach(([key, value]) => {\n if (value) {\n enableKeys.push(key)\n } else {\n disabledKeys.push(key)\n }\n })\n\n return {\n [`_enabled${toolType}`]: updatedTools,\n [`enabled${toolType}`]: enableKeys,\n [`disabled${toolType}`]: disabledKeys,\n }\n }),\n reset: (bridges, exchanges) => {\n set(() => ({\n ...defaultSettings,\n ...defaultConfigurableSettings,\n }))\n get().initializeTools('Bridges', bridges, true)\n get().initializeTools('Exchanges', exchanges, true)\n return { ...get() }\n },\n }),\n {\n name: 'li.fi-widget-settings',\n version: 6,\n partialize: (state) => {\n const {\n disabledBridges,\n disabledExchanges,\n enabledBridges,\n enabledExchanges,\n ...partializedState\n } = state\n return partializedState\n },\n merge: (persistedState: any, currentState: SettingsState) => {\n const state = { ...currentState, ...persistedState }\n SettingsToolTypes.forEach((toolType) => {\n if (persistedState?.[`_enabled${toolType}`]) {\n const enabledToolKeys = Object.keys(\n persistedState[`_enabled${toolType}`]\n )\n state[`enabled${toolType}`] = enabledToolKeys.filter(\n (key) => persistedState[`_enabled${toolType}`][key]\n )\n state[`disabled${toolType}`] = enabledToolKeys.filter(\n (key) => !persistedState[`_enabled${toolType}`][key]\n )\n }\n })\n return state\n },\n migrate: () => ({}),\n onRehydrateStorage: () => {\n const initializeLanguageSettings = async (\n state: SettingsState,\n initialLanguage?: string\n ) => {\n const customLanguages = Object.keys(\n config?.languageResources || {}\n ).filter((key) => !allLanguages.includes(key as LanguageKey))\n if (\n initialLanguage &&\n // Custom language resources and English are added statically.\n initialLanguage !== 'en' &&\n !customLanguages.includes(initialLanguage)\n ) {\n await loadLocale(\n initialLanguage as LanguageKey,\n config?.languageResources?.[initialLanguage as LanguageKey]\n ).then((languageResource) => {\n state.setValues({\n language: initialLanguage,\n languageCache: languageResource,\n })\n })\n }\n }\n return (state?: SettingsState) => {\n // Preload translations (from existing translation files)\n if (state) {\n // NB: State always exists unless there is any error\n initializeLanguageSettings(\n state,\n state.getValue('language') || config?.languages?.default\n )\n }\n }\n },\n }\n )\n )\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createSettingsStore.js","names":[],"sources":["../../../../src/stores/settings/createSettingsStore.ts"],"sourcesContent":["/** biome-ignore-all lint/correctness/noUnusedVariables: allowed in this store */\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport { allLanguages } from '../../providers/I18nProvider/constants.js'\nimport { loadLocale } from '../../providers/I18nProvider/i18n.js'\nimport type { LanguageKey } from '../../providers/I18nProvider/types.js'\nimport type { WidgetConfig } from '../../types/widget.js'\nimport type { SettingsProps, SettingsState } from './types.js'\nimport { SettingsToolTypes } from './types.js'\nimport { getStateValues } from './utils/getStateValues.js'\n\nexport const defaultSlippage = undefined\n\nexport const defaultConfigurableSettings: Pick<\n SettingsState,\n 'routePriority' | 'slippage' | 'gasPrice'\n> = {\n routePriority: 'CHEAPEST',\n slippage: defaultSlippage,\n gasPrice: 'normal',\n}\n\nconst defaultSettings: SettingsProps = {\n gasPrice: 'normal',\n enabledAutoRefuel: true,\n disabledBridges: [],\n disabledExchanges: [],\n enabledBridges: [],\n enabledExchanges: [],\n _enabledBridges: {},\n _enabledExchanges: {},\n smallBalanceThreshold: undefined,\n}\n\nexport const createSettingsStore = (\n config: WidgetConfig\n): UseBoundStore<StoreApi<SettingsState>> =>\n create<SettingsState>()(\n persist(\n (set, get) => ({\n ...defaultSettings,\n setValue: (key, value) =>\n set(() => ({\n [key]: value,\n })),\n setValues: (values: Partial<SettingsProps>) =>\n set(() => ({\n ...values,\n })),\n getSettings: () => getStateValues(get()),\n getValue: (key) => get()[key],\n initializeTools: (toolType, tools, reset) => {\n if (!tools.length) {\n return\n }\n set((state) => {\n const updatedState = { ...state }\n if (!reset) {\n // Add new tools\n tools.forEach((tool) => {\n if (!Object.hasOwn(updatedState[`_enabled${toolType}`], tool)) {\n updatedState[`_enabled${toolType}`][tool] = true\n }\n })\n // Filter tools we no longer have\n updatedState[`_enabled${toolType}`] = Object.fromEntries(\n Object.entries(updatedState[`_enabled${toolType}`]).filter(\n ([key]) => tools.includes(key)\n )\n )\n } else {\n tools.forEach((tool) => {\n updatedState[`_enabled${toolType}`][tool] = true\n })\n }\n const enabledToolKeys = Object.keys(\n updatedState[`_enabled${toolType}`]\n )\n updatedState[`enabled${toolType}`] = enabledToolKeys.filter(\n (key) => updatedState[`_enabled${toolType}`][key]\n )\n updatedState[`disabled${toolType}`] = enabledToolKeys.filter(\n (key) => !updatedState[`_enabled${toolType}`][key]\n )\n return updatedState\n })\n },\n setToolValue: (toolType, tool, value) =>\n set((state) => {\n const enabledTools = {\n ...state[`_enabled${toolType}`],\n [tool]: value,\n }\n const enabledToolKeys = Object.keys(enabledTools)\n return {\n [`_enabled${toolType}`]: enabledTools,\n [`enabled${toolType}`]: enabledToolKeys.filter(\n (key) => enabledTools[key]\n ),\n [`disabled${toolType}`]: enabledToolKeys.filter(\n (key) => !enabledTools[key]\n ),\n }\n }),\n toggleToolKeys: (toolType, toolKeys) =>\n set((state) => {\n const allKeysInCollectionEnabled = toolKeys.every(\n (toolKey) => state[`_enabled${toolType}`][toolKey]\n )\n\n // then toggle those keys to false\n const updatedTools = toolKeys.reduce(\n (accum, toolKey) => {\n accum[toolKey] = !allKeysInCollectionEnabled\n return accum\n },\n {\n ...state[`_enabled${toolType}`],\n }\n )\n\n const enableKeys: string[] = []\n const disabledKeys: string[] = []\n\n Object.entries(updatedTools).forEach(([key, value]) => {\n if (value) {\n enableKeys.push(key)\n } else {\n disabledKeys.push(key)\n }\n })\n\n return {\n [`_enabled${toolType}`]: updatedTools,\n [`enabled${toolType}`]: enableKeys,\n [`disabled${toolType}`]: disabledKeys,\n }\n }),\n reset: (bridges, exchanges) => {\n set(() => ({\n ...defaultSettings,\n ...defaultConfigurableSettings,\n }))\n get().initializeTools('Bridges', bridges, true)\n get().initializeTools('Exchanges', exchanges, true)\n return { ...get() }\n },\n }),\n {\n name: 'li.fi-widget-settings',\n version: 6,\n partialize: (state) => {\n const {\n disabledBridges,\n disabledExchanges,\n enabledBridges,\n enabledExchanges,\n ...partializedState\n } = state\n return partializedState\n },\n merge: (persistedState: any, currentState: SettingsState) => {\n const state = { ...currentState, ...persistedState }\n SettingsToolTypes.forEach((toolType) => {\n if (persistedState?.[`_enabled${toolType}`]) {\n const enabledToolKeys = Object.keys(\n persistedState[`_enabled${toolType}`]\n )\n state[`enabled${toolType}`] = enabledToolKeys.filter(\n (key) => persistedState[`_enabled${toolType}`][key]\n )\n state[`disabled${toolType}`] = enabledToolKeys.filter(\n (key) => !persistedState[`_enabled${toolType}`][key]\n )\n }\n })\n return state\n },\n migrate: () => ({}),\n onRehydrateStorage: () => {\n const initializeLanguageSettings = async (\n state: SettingsState,\n initialLanguage?: string\n ) => {\n const customLanguages = Object.keys(\n config?.languageResources || {}\n ).filter((key) => !allLanguages.includes(key as LanguageKey))\n if (\n initialLanguage &&\n // Custom language resources and English are added statically.\n initialLanguage !== 'en' &&\n !customLanguages.includes(initialLanguage)\n ) {\n await loadLocale(\n initialLanguage as LanguageKey,\n config?.languageResources?.[initialLanguage as LanguageKey]\n ).then((languageResource) => {\n state.setValues({\n language: initialLanguage,\n languageCache: languageResource,\n })\n })\n }\n }\n return (state?: SettingsState) => {\n // Preload translations (from existing translation files)\n if (state) {\n // NB: State always exists unless there is any error\n initializeLanguageSettings(\n state,\n state.getValue('language') || config?.languages?.default\n )\n }\n }\n },\n }\n )\n )\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSettings.js","names":[],"sources":["../../../../src/stores/settings/useSettings.ts"],"sourcesContent":["import { useSettingsStore } from './SettingsStore.js'\nimport type { SettingsState } from './types.js'\n\nexport const useSettings = <K extends keyof SettingsState>(\n keys: Array<K>\n): Pick<SettingsState, (typeof keys)[number]> => {\n return useSettingsStore((state) =>\n keys.reduce(\n (values, key) => {\n values[key] = state[key]\n return values\n },\n {} as Pick<SettingsState, (typeof keys)[number]>\n )\n )\n}\n"],"mappings":";;AAGA,MAAa,eACX,SAC+C;
|
|
1
|
+
{"version":3,"file":"useSettings.js","names":[],"sources":["../../../../src/stores/settings/useSettings.ts"],"sourcesContent":["import { useSettingsStore } from './SettingsStore.js'\nimport type { SettingsState } from './types.js'\n\nexport const useSettings = <K extends keyof SettingsState>(\n keys: Array<K>\n): Pick<SettingsState, (typeof keys)[number]> => {\n return useSettingsStore((state) =>\n keys.reduce(\n (values, key) => {\n values[key] = state[key]\n return values\n },\n {} as Pick<SettingsState, (typeof keys)[number]>\n )\n )\n}\n"],"mappings":";;AAGA,MAAa,eACX,SAC+C;CAC/C,OAAO,kBAAkB,UACvB,KAAK,QACF,QAAQ,QAAQ;EACf,OAAO,OAAO,MAAM;EACpB,OAAO;IAET,EAAE,CACH,CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSettingsActions.js","names":[],"sources":["../../../../src/stores/settings/useSettingsActions.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport type { widgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport type { WidgetConfig } from '../../types/widget.js'\nimport { deepEqual } from '../../utils/deepEqual.js'\nimport { defaultConfigurableSettings } from './createSettingsStore.js'\nimport { useSettingsStore } from './SettingsStore.js'\nimport type {\n SettingsActions,\n SettingsProps,\n SettingsToolType,\n ValueSetter,\n} from './types.js'\n\nconst emitEventOnChange = <T extends (...args: any[]) => any>(\n emitter: typeof widgetEvents,\n actions: Omit<SettingsActions, 'initializeTools'>,\n settingFunction: T,\n ...args: Parameters<T>\n) => {\n const oldSettings = actions.getSettings()\n\n settingFunction(...args)\n\n const newSettings = actions.getSettings()\n\n if (!deepEqual(oldSettings, newSettings)) {\n ;(Object.keys(oldSettings) as (keyof SettingsProps)[]).forEach(\n (toolKey) => {\n if (!deepEqual(oldSettings[toolKey], newSettings[toolKey])) {\n emitter.emit(WidgetEvent.SettingUpdated, {\n setting: toolKey,\n newValue: newSettings[toolKey],\n oldValue: oldSettings[toolKey],\n newSettings: newSettings,\n oldSettings: oldSettings,\n })\n }\n }\n )\n }\n}\n\nexport const useSettingsActions = (): {\n setValue: ValueSetter<SettingsProps>\n setValues: (values: Partial<SettingsProps>) => void\n setDefaultSettings: (config?: WidgetConfig) => void\n resetSettings: (bridges: string[], exchanges: string[]) => void\n setToolValue: (\n toolType: SettingsToolType,\n tool: string,\n value: boolean\n ) => void\n toggleToolKeys: (toolType: SettingsToolType, toolKeys: string[]) => void\n} => {\n const emitter = useWidgetEvents()\n const actions = useSettingsStore((state) => ({\n setValue: state.setValue,\n setValues: state.setValues,\n getValue: state.getValue,\n getSettings: state.getSettings,\n reset: state.reset,\n setToolValue: state.setToolValue,\n toggleToolKeys: state.toggleToolKeys,\n }))\n\n const setValueWithEmittedEvent = useCallback<ValueSetter<SettingsProps>>(\n (value, newValue) => {\n const setting = value as keyof SettingsProps\n emitEventOnChange(emitter, actions, actions.setValue, setting, newValue)\n },\n [emitter, actions]\n )\n\n const setValuesWithEmittedEvent = useCallback(\n (values: Partial<SettingsProps>) => {\n Object.entries(values).forEach(([key, value]) => {\n setValueWithEmittedEvent(key as keyof SettingsProps, value)\n })\n },\n [setValueWithEmittedEvent]\n )\n\n const setDefaultSettingsWithEmittedEvents = useCallback(\n (config?: WidgetConfig) => {\n const slippage = actions.getValue('slippage')\n const routePriority = actions.getValue('routePriority')\n const gasPrice = actions.getValue('gasPrice')\n\n const defaultSlippage =\n (config?.slippage || config?.sdkConfig?.routeOptions?.slippage || 0) *\n 100\n const defaultRoutePriority =\n config?.routePriority || config?.sdkConfig?.routeOptions?.order\n\n defaultConfigurableSettings.slippage = (\n defaultSlippage || defaultConfigurableSettings.slippage\n )?.toString()\n\n defaultConfigurableSettings.routePriority =\n defaultRoutePriority || defaultConfigurableSettings.routePriority\n\n if (!slippage) {\n setValueWithEmittedEvent(\n 'slippage',\n defaultConfigurableSettings.slippage\n )\n }\n if (!routePriority) {\n setValueWithEmittedEvent(\n 'routePriority',\n defaultConfigurableSettings.routePriority\n )\n }\n if (!gasPrice) {\n setValueWithEmittedEvent(\n 'gasPrice',\n defaultConfigurableSettings.gasPrice\n )\n }\n },\n [actions, setValueWithEmittedEvent]\n )\n\n const resetWithEmittedEvents = useCallback(\n (bridges: string[], exchanges: string[]) => {\n emitEventOnChange(emitter, actions, actions.reset, bridges, exchanges)\n },\n [emitter, actions]\n )\n\n const setToolValueWithEmittedEvents = useCallback(\n (toolType: SettingsToolType, tool: string, value: boolean) => {\n emitEventOnChange(\n emitter,\n actions,\n actions.setToolValue,\n toolType,\n tool,\n value\n )\n },\n [emitter, actions]\n )\n\n const toggleToolKeysWithEmittedEvents = useCallback(\n (toolType: SettingsToolType, toolKeys: string[]) => {\n emitEventOnChange(\n emitter,\n actions,\n actions.toggleToolKeys,\n toolType,\n toolKeys\n )\n },\n [emitter, actions]\n )\n\n return {\n setValue: setValueWithEmittedEvent,\n setValues: setValuesWithEmittedEvent,\n setDefaultSettings: setDefaultSettingsWithEmittedEvents,\n resetSettings: resetWithEmittedEvents,\n setToolValue: setToolValueWithEmittedEvents,\n toggleToolKeys: toggleToolKeysWithEmittedEvents,\n }\n}\n"],"mappings":";;;;;;;AAeA,MAAM,qBACJ,SACA,SACA,iBACA,GAAG,SACA;CACH,MAAM,cAAc,QAAQ,aAAa;
|
|
1
|
+
{"version":3,"file":"useSettingsActions.js","names":[],"sources":["../../../../src/stores/settings/useSettingsActions.ts"],"sourcesContent":["import { useCallback } from 'react'\nimport type { widgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { useWidgetEvents } from '../../hooks/useWidgetEvents.js'\nimport { WidgetEvent } from '../../types/events.js'\nimport type { WidgetConfig } from '../../types/widget.js'\nimport { deepEqual } from '../../utils/deepEqual.js'\nimport { defaultConfigurableSettings } from './createSettingsStore.js'\nimport { useSettingsStore } from './SettingsStore.js'\nimport type {\n SettingsActions,\n SettingsProps,\n SettingsToolType,\n ValueSetter,\n} from './types.js'\n\nconst emitEventOnChange = <T extends (...args: any[]) => any>(\n emitter: typeof widgetEvents,\n actions: Omit<SettingsActions, 'initializeTools'>,\n settingFunction: T,\n ...args: Parameters<T>\n) => {\n const oldSettings = actions.getSettings()\n\n settingFunction(...args)\n\n const newSettings = actions.getSettings()\n\n if (!deepEqual(oldSettings, newSettings)) {\n ;(Object.keys(oldSettings) as (keyof SettingsProps)[]).forEach(\n (toolKey) => {\n if (!deepEqual(oldSettings[toolKey], newSettings[toolKey])) {\n emitter.emit(WidgetEvent.SettingUpdated, {\n setting: toolKey,\n newValue: newSettings[toolKey],\n oldValue: oldSettings[toolKey],\n newSettings: newSettings,\n oldSettings: oldSettings,\n })\n }\n }\n )\n }\n}\n\nexport const useSettingsActions = (): {\n setValue: ValueSetter<SettingsProps>\n setValues: (values: Partial<SettingsProps>) => void\n setDefaultSettings: (config?: WidgetConfig) => void\n resetSettings: (bridges: string[], exchanges: string[]) => void\n setToolValue: (\n toolType: SettingsToolType,\n tool: string,\n value: boolean\n ) => void\n toggleToolKeys: (toolType: SettingsToolType, toolKeys: string[]) => void\n} => {\n const emitter = useWidgetEvents()\n const actions = useSettingsStore((state) => ({\n setValue: state.setValue,\n setValues: state.setValues,\n getValue: state.getValue,\n getSettings: state.getSettings,\n reset: state.reset,\n setToolValue: state.setToolValue,\n toggleToolKeys: state.toggleToolKeys,\n }))\n\n const setValueWithEmittedEvent = useCallback<ValueSetter<SettingsProps>>(\n (value, newValue) => {\n const setting = value as keyof SettingsProps\n emitEventOnChange(emitter, actions, actions.setValue, setting, newValue)\n },\n [emitter, actions]\n )\n\n const setValuesWithEmittedEvent = useCallback(\n (values: Partial<SettingsProps>) => {\n Object.entries(values).forEach(([key, value]) => {\n setValueWithEmittedEvent(key as keyof SettingsProps, value)\n })\n },\n [setValueWithEmittedEvent]\n )\n\n const setDefaultSettingsWithEmittedEvents = useCallback(\n (config?: WidgetConfig) => {\n const slippage = actions.getValue('slippage')\n const routePriority = actions.getValue('routePriority')\n const gasPrice = actions.getValue('gasPrice')\n\n const defaultSlippage =\n (config?.slippage || config?.sdkConfig?.routeOptions?.slippage || 0) *\n 100\n const defaultRoutePriority =\n config?.routePriority || config?.sdkConfig?.routeOptions?.order\n\n defaultConfigurableSettings.slippage = (\n defaultSlippage || defaultConfigurableSettings.slippage\n )?.toString()\n\n defaultConfigurableSettings.routePriority =\n defaultRoutePriority || defaultConfigurableSettings.routePriority\n\n if (!slippage) {\n setValueWithEmittedEvent(\n 'slippage',\n defaultConfigurableSettings.slippage\n )\n }\n if (!routePriority) {\n setValueWithEmittedEvent(\n 'routePriority',\n defaultConfigurableSettings.routePriority\n )\n }\n if (!gasPrice) {\n setValueWithEmittedEvent(\n 'gasPrice',\n defaultConfigurableSettings.gasPrice\n )\n }\n },\n [actions, setValueWithEmittedEvent]\n )\n\n const resetWithEmittedEvents = useCallback(\n (bridges: string[], exchanges: string[]) => {\n emitEventOnChange(emitter, actions, actions.reset, bridges, exchanges)\n },\n [emitter, actions]\n )\n\n const setToolValueWithEmittedEvents = useCallback(\n (toolType: SettingsToolType, tool: string, value: boolean) => {\n emitEventOnChange(\n emitter,\n actions,\n actions.setToolValue,\n toolType,\n tool,\n value\n )\n },\n [emitter, actions]\n )\n\n const toggleToolKeysWithEmittedEvents = useCallback(\n (toolType: SettingsToolType, toolKeys: string[]) => {\n emitEventOnChange(\n emitter,\n actions,\n actions.toggleToolKeys,\n toolType,\n toolKeys\n )\n },\n [emitter, actions]\n )\n\n return {\n setValue: setValueWithEmittedEvent,\n setValues: setValuesWithEmittedEvent,\n setDefaultSettings: setDefaultSettingsWithEmittedEvents,\n resetSettings: resetWithEmittedEvents,\n setToolValue: setToolValueWithEmittedEvents,\n toggleToolKeys: toggleToolKeysWithEmittedEvents,\n }\n}\n"],"mappings":";;;;;;;AAeA,MAAM,qBACJ,SACA,SACA,iBACA,GAAG,SACA;CACH,MAAM,cAAc,QAAQ,aAAa;CAEzC,gBAAgB,GAAG,KAAK;CAExB,MAAM,cAAc,QAAQ,aAAa;CAEzC,IAAI,CAAC,UAAU,aAAa,YAAY,EACrC,OAAQ,KAAK,YAAY,CAA6B,SACpD,YAAY;EACX,IAAI,CAAC,UAAU,YAAY,UAAU,YAAY,SAAS,EACxD,QAAQ,KAAA,kBAAiC;GACvC,SAAS;GACT,UAAU,YAAY;GACtB,UAAU,YAAY;GACT;GACA;GACd,CAAC;GAGP;;AAIL,MAAa,2BAWR;CACH,MAAM,UAAU,iBAAiB;CACjC,MAAM,UAAU,kBAAkB,WAAW;EAC3C,UAAU,MAAM;EAChB,WAAW,MAAM;EACjB,UAAU,MAAM;EAChB,aAAa,MAAM;EACnB,OAAO,MAAM;EACb,cAAc,MAAM;EACpB,gBAAgB,MAAM;EACvB,EAAE;CAEH,MAAM,2BAA2B,aAC9B,OAAO,aAAa;EACnB,MAAM,UAAU;EAChB,kBAAkB,SAAS,SAAS,QAAQ,UAAU,SAAS,SAAS;IAE1E,CAAC,SAAS,QAAQ,CACnB;CAsFD,OAAO;EACL,UAAU;EACV,WAtFgC,aAC/B,WAAmC;GAClC,OAAO,QAAQ,OAAO,CAAC,SAAS,CAAC,KAAK,WAAW;IAC/C,yBAAyB,KAA4B,MAAM;KAC3D;KAEJ,CAAC,yBAAyB,CAgFU;EACpC,oBA9E0C,aACzC,WAA0B;GACzB,MAAM,WAAW,QAAQ,SAAS,WAAW;GAC7C,MAAM,gBAAgB,QAAQ,SAAS,gBAAgB;GACvD,MAAM,WAAW,QAAQ,SAAS,WAAW;GAE7C,MAAM,mBACH,QAAQ,YAAY,QAAQ,WAAW,cAAc,YAAY,KAClE;GACF,MAAM,uBACJ,QAAQ,iBAAiB,QAAQ,WAAW,cAAc;GAE5D,4BAA4B,YAC1B,mBAAmB,4BAA4B,WAC9C,UAAU;GAEb,4BAA4B,gBAC1B,wBAAwB,4BAA4B;GAEtD,IAAI,CAAC,UACH,yBACE,YACA,4BAA4B,SAC7B;GAEH,IAAI,CAAC,eACH,yBACE,iBACA,4BAA4B,cAC7B;GAEH,IAAI,CAAC,UACH,yBACE,YACA,4BAA4B,SAC7B;KAGL,CAAC,SAAS,yBAAyB,CAwCoB;EACvD,eAtC6B,aAC5B,SAAmB,cAAwB;GAC1C,kBAAkB,SAAS,SAAS,QAAQ,OAAO,SAAS,UAAU;KAExE,CAAC,SAAS,QAAQ,CAkCmB;EACrC,cAhCoC,aACnC,UAA4B,MAAc,UAAmB;GAC5D,kBACE,SACA,SACA,QAAQ,cACR,UACA,MACA,MACD;KAEH,CAAC,SAAS,QAAQ,CAqByB;EAC3C,gBAnBsC,aACrC,UAA4B,aAAuB;GAClD,kBACE,SACA,SACA,QAAQ,gBACR,UACA,SACD;KAEH,CAAC,SAAS,QAAQ,CAS6B;EAChD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSplitSubvariantStore.js","names":[],"sources":["../../../../src/stores/settings/useSplitSubvariantStore.tsx"],"sourcesContent":["import { createContext, type JSX, useContext, useRef } from 'react'\nimport { create } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport type {\n SplitSubvariantProps,\n SplitSubvariantProviderProps,\n SplitSubvariantState,\n SplitSubvariantStore,\n} from './types.js'\n\nconst SplitSubvariantStoreContext = createContext<SplitSubvariantStore | null>(\n null\n)\n\nconst shouldRecreateStore = (\n store: SplitSubvariantStore,\n props: SplitSubvariantProps\n) => {\n const { state } = store.getState()\n return state !== props.state\n}\n\nexport function SplitSubvariantStoreProvider({\n children,\n ...props\n}: SplitSubvariantProviderProps): JSX.Element {\n const storeRef = useRef<SplitSubvariantStore>(null)\n if (!storeRef.current || shouldRecreateStore(storeRef.current, props)) {\n storeRef.current = createSplitSubvariantStore(props)\n }\n return (\n <SplitSubvariantStoreContext.Provider value={storeRef.current}>\n {children}\n </SplitSubvariantStoreContext.Provider>\n )\n}\n\nfunction useSplitSubvariantStoreContext() {\n const useStore = useContext(SplitSubvariantStoreContext)\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${SplitSubvariantStoreProvider.name}>.`\n )\n }\n return useStore\n}\n\nexport function useSplitSubvariantStore<T>(\n selector: (state: SplitSubvariantState) => T\n): T {\n const useStore = useSplitSubvariantStoreContext()\n return useStore(useShallow(selector))\n}\n\nconst createSplitSubvariantStore = ({ state }: SplitSubvariantProps) =>\n create<SplitSubvariantState>((set) => ({\n state,\n setState(state) {\n set(() => ({\n state,\n }))\n },\n }))\n"],"mappings":";;;;;AAUA,MAAM,8BAA8B,cAClC,KACD;AAED,MAAM,uBACJ,OACA,UACG;CACH,MAAM,EAAE,UAAU,MAAM,UAAU;
|
|
1
|
+
{"version":3,"file":"useSplitSubvariantStore.js","names":[],"sources":["../../../../src/stores/settings/useSplitSubvariantStore.tsx"],"sourcesContent":["import { createContext, type JSX, useContext, useRef } from 'react'\nimport { create } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport type {\n SplitSubvariantProps,\n SplitSubvariantProviderProps,\n SplitSubvariantState,\n SplitSubvariantStore,\n} from './types.js'\n\nconst SplitSubvariantStoreContext = createContext<SplitSubvariantStore | null>(\n null\n)\n\nconst shouldRecreateStore = (\n store: SplitSubvariantStore,\n props: SplitSubvariantProps\n) => {\n const { state } = store.getState()\n return state !== props.state\n}\n\nexport function SplitSubvariantStoreProvider({\n children,\n ...props\n}: SplitSubvariantProviderProps): JSX.Element {\n const storeRef = useRef<SplitSubvariantStore>(null)\n if (!storeRef.current || shouldRecreateStore(storeRef.current, props)) {\n storeRef.current = createSplitSubvariantStore(props)\n }\n return (\n <SplitSubvariantStoreContext.Provider value={storeRef.current}>\n {children}\n </SplitSubvariantStoreContext.Provider>\n )\n}\n\nfunction useSplitSubvariantStoreContext() {\n const useStore = useContext(SplitSubvariantStoreContext)\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${SplitSubvariantStoreProvider.name}>.`\n )\n }\n return useStore\n}\n\nexport function useSplitSubvariantStore<T>(\n selector: (state: SplitSubvariantState) => T\n): T {\n const useStore = useSplitSubvariantStoreContext()\n return useStore(useShallow(selector))\n}\n\nconst createSplitSubvariantStore = ({ state }: SplitSubvariantProps) =>\n create<SplitSubvariantState>((set) => ({\n state,\n setState(state) {\n set(() => ({\n state,\n }))\n },\n }))\n"],"mappings":";;;;;AAUA,MAAM,8BAA8B,cAClC,KACD;AAED,MAAM,uBACJ,OACA,UACG;CACH,MAAM,EAAE,UAAU,MAAM,UAAU;CAClC,OAAO,UAAU,MAAM;;AAGzB,SAAgB,6BAA6B,EAC3C,UACA,GAAG,SACyC;CAC5C,MAAM,WAAW,OAA6B,KAAK;CACnD,IAAI,CAAC,SAAS,WAAW,oBAAoB,SAAS,SAAS,MAAM,EACnE,SAAS,UAAU,2BAA2B,MAAM;CAEtD,OACE,oBAAC,4BAA4B,UAA7B;EAAsC,OAAO,SAAS;EACnD;EACoC,CAAA;;AAI3C,SAAS,iCAAiC;CACxC,MAAM,WAAW,WAAW,4BAA4B;CACxD,IAAI,CAAC,UACH,MAAM,IAAI,MACR,yCAAyC,6BAA6B,KAAK,IAC5E;CAEH,OAAO;;AAGT,SAAgB,wBACd,UACG;CAEH,OADiB,gCACF,CAAC,WAAW,SAAS,CAAC;;AAGvC,MAAM,8BAA8B,EAAE,YACpC,QAA8B,SAAS;CACrC;CACA,SAAS,OAAO;EACd,WAAW,EACT,OACD,EAAE;;CAEN,EAAE"}
|