@lifi/widget 4.0.0 → 4.1.0
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.d.ts +4 -2
- package/dist/esm/App.d.ts.map +1 -1
- package/dist/esm/App.js +4 -4
- package/dist/esm/App.js.map +1 -1
- package/dist/esm/AppDrawer.d.ts +1 -1
- package/dist/esm/AppDrawer.d.ts.map +1 -1
- package/dist/esm/AppDrawer.js +5 -6
- package/dist/esm/AppDrawer.js.map +1 -1
- package/dist/esm/AppDrawerContext.js +2 -2
- package/dist/esm/AppDrawerContext.js.map +1 -1
- package/dist/esm/components/ActionRow/ActionRow.style.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInput.style.js.map +1 -1
- package/dist/esm/components/AmountInput/AmountInputEndAdornment.style.js.map +1 -1
- package/dist/esm/components/AmountInput/PriceFormHelperText.style.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.style.js.map +1 -1
- package/dist/esm/components/Avatar/SmallAvatar.js.map +1 -1
- package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js +1 -0
- package/dist/esm/components/BaseTransactionButton/BaseTransactionButton.js.map +1 -1
- package/dist/esm/components/BottomSheet/BottomSheet.js +3 -3
- package/dist/esm/components/BottomSheet/BottomSheet.js.map +1 -1
- package/dist/esm/components/ButtonTertiary.js.map +1 -1
- package/dist/esm/components/Card/Card.js.map +1 -1
- package/dist/esm/components/Card/CardButton.style.js.map +1 -1
- package/dist/esm/components/Card/CardHeader.js.map +1 -1
- package/dist/esm/components/Card/CardIconButton.js.map +1 -1
- package/dist/esm/components/Card/CardLabel.js.map +1 -1
- package/dist/esm/components/Card/CardTitle.js.map +1 -1
- package/dist/esm/components/Card/InputCard.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.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/ChainsExpanded.style.js.map +1 -1
- package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
- package/dist/esm/components/ContextMenu.style.js.map +1 -1
- package/dist/esm/components/ContractComponent/NFT/NFT.style.js.map +1 -1
- package/dist/esm/components/Dialog/Dialog.style.js.map +1 -1
- package/dist/esm/components/EmptyListIndicator/EmptyListIndicator.style.js.map +1 -1
- package/dist/esm/components/ExecutionStatusCard/StatusIcon.js.map +1 -1
- package/dist/esm/components/ExecutionStatusCard/StatusIcon.style.js.map +1 -1
- package/dist/esm/components/ExecutionStatusCard/iconKey.js.map +1 -1
- package/dist/esm/components/Expansion/Expansion.style.js.map +1 -1
- package/dist/esm/components/Header/ActivitiesButton.style.js.map +1 -1
- package/dist/esm/components/Header/CloseDrawerButton.js +1 -0
- package/dist/esm/components/Header/CloseDrawerButton.js.map +1 -1
- package/dist/esm/components/Header/Header.js +7 -10
- 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/HeaderNavigationTabs.js +26 -0
- package/dist/esm/components/Header/HeaderNavigationTabs.js.map +1 -0
- package/dist/esm/components/Header/HeaderTabs.js +33 -0
- package/dist/esm/components/Header/HeaderTabs.js.map +1 -0
- package/dist/esm/components/Header/NavigationHeader.js +7 -5
- package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
- package/dist/esm/components/Header/SettingsButton.style.js.map +1 -1
- package/dist/esm/components/Header/WalletMenu.style.js.map +1 -1
- package/dist/esm/components/IconCircle/IconCircle.style.js.map +1 -1
- package/dist/esm/components/IconTypography.js.map +1 -1
- package/dist/esm/components/Input.js.map +1 -1
- package/dist/esm/components/ListItem/ListItem.js.map +1 -1
- package/dist/esm/components/ListItem/ListItemButton.js.map +1 -1
- package/dist/esm/components/ListItemButton.js.map +1 -1
- package/dist/esm/components/ListItemText.js.map +1 -1
- package/dist/esm/components/Menu.js.map +1 -1
- package/dist/esm/components/Messages/AlertMessage.style.js.map +1 -1
- package/dist/esm/components/Messages/GasRefuelMessage.style.js.map +1 -1
- package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
- package/dist/esm/components/PageContainer.js.map +1 -1
- package/dist/esm/components/PoweredBy/PoweredBy.js.map +1 -1
- package/dist/esm/components/PoweredBy/PoweredBy.style.js.map +1 -1
- package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.js +1 -0
- 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/RouteDetails.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteDetails.style.js +2 -2
- package/dist/esm/components/RouteCard/RouteDetails.style.js.map +1 -1
- package/dist/esm/components/RouteCard/RouteToken.style.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/RoutesContent.js.map +1 -1
- package/dist/esm/components/Routes/RoutesExpanded.style.js.map +1 -1
- package/dist/esm/components/Search/SearchInput.style.js.map +1 -1
- package/dist/esm/components/Search/SearchNotFound.style.js.map +1 -1
- package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
- package/dist/esm/components/SendToWallet/SendToWalletButton.style.js.map +1 -1
- package/dist/esm/components/SettingsListItemButton.js.map +1 -1
- package/dist/esm/components/Skeleton/WidgetSkeleton.js +50 -47
- 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/StepActions.js.map +1 -1
- package/dist/esm/components/Step/StepActions.style.js.map +1 -1
- package/dist/esm/components/StepActions/SentToWalletRow.style.js.map +1 -1
- package/dist/esm/components/StepActions/StepActionRow.style.js.map +1 -1
- package/dist/esm/components/Switch.js.map +1 -1
- package/dist/esm/components/Tabs/NavigationTabs.js +3 -0
- package/dist/esm/components/Tabs/NavigationTabs.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
- package/dist/esm/components/Timer/StepStatusTimer.style.js.map +1 -1
- package/dist/esm/components/Token/Token.style.js.map +1 -1
- package/dist/esm/components/TokenList/PinTokenButton.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheet.js +4 -4
- package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +4 -4
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
- package/dist/esm/components/TokenList/TokenDetailsSheetContent.style.js.map +1 -1
- package/dist/esm/components/TokenList/TokenList.style.js.map +1 -1
- package/dist/esm/components/TokenList/TokenListItem.js +2 -2
- package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
- package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
- package/dist/esm/components/TokenList/useTokenSelect.js +3 -3
- package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
- package/dist/esm/components/TokenRate/TokenRate.style.js.map +1 -1
- package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
- package/dist/esm/components/TransactionCard/ActiveTransactionCard.style.js.map +1 -1
- package/dist/esm/components/TransactionCard/TransactionCard.style.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/validate.js.map +1 -1
- package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
- package/dist/esm/hooks/useAvailableChains.js +1 -1
- package/dist/esm/hooks/useChainSearch.js.map +1 -1
- package/dist/esm/hooks/useChains.js +1 -1
- package/dist/esm/hooks/useExplorer.js.map +1 -1
- package/dist/esm/hooks/useFilteredByTokenBalances.js +1 -1
- package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
- package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
- package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
- package/dist/esm/hooks/useLanguages.js +2 -2
- package/dist/esm/hooks/useLanguages.js.map +1 -1
- package/dist/esm/hooks/useRouteExecution.js.map +1 -1
- package/dist/esm/hooks/useRouteExecutionMessage.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/useSwapOnly.js +2 -4
- package/dist/esm/hooks/useSwapOnly.js.map +1 -1
- package/dist/esm/hooks/useToAddressRequirements.js +2 -2
- package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
- package/dist/esm/hooks/useToken.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/useTokenSearch.js +1 -1
- package/dist/esm/hooks/useTokenSearch.js.map +1 -1
- package/dist/esm/hooks/useTokens.js +1 -1
- package/dist/esm/hooks/useTokens.js.map +1 -1
- package/dist/esm/hooks/useTools.js +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/i18n/en.json +3 -0
- package/dist/esm/index.d.ts +2 -2
- package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
- package/dist/esm/pages/MainPage/ReviewButton.js +2 -2
- package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
- package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
- package/dist/esm/pages/RoutesPage/RoutesPage.style.js.map +1 -1
- package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js +3 -3
- package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
- package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js +3 -3
- package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
- package/dist/esm/pages/SendToWallet/SendToWalletPage.style.js.map +1 -1
- package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
- package/dist/esm/pages/SettingsPage/GasPriceSettings.js +1 -1
- package/dist/esm/pages/SettingsPage/ResetSettingsButton.style.js.map +1 -1
- package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js +1 -1
- package/dist/esm/pages/SettingsPage/SettingsCard/SettingCard.style.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js +3 -3
- package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js +3 -3
- package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js.map +1 -1
- package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.style.js.map +1 -1
- package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
- package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.style.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/TransactionPage/ConfirmToAddressSheet.js +3 -3
- package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js +16 -15
- package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.style.js.map +1 -1
- package/dist/esm/pages/TransactionPage/RouteTracker.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +3 -3
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.style.js.map +1 -1
- package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js +27 -31
- package/dist/esm/pages/TransactionPage/TransactionExecutionContent.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 +2 -2
- package/dist/esm/providers/QueryClientProvider.js.map +1 -1
- package/dist/esm/providers/SDKClientProvider.js +26 -27
- package/dist/esm/providers/SDKClientProvider.js.map +1 -1
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js +25 -27
- package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
- package/dist/esm/stores/StoreProvider.js +3 -4
- package/dist/esm/stores/StoreProvider.js.map +1 -1
- package/dist/esm/stores/bookmarks/BookmarkStore.js +3 -3
- package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
- package/dist/esm/stores/bookmarks/createBookmarkStore.js.map +1 -1
- package/dist/esm/stores/chains/ChainOrderStore.js +4 -4
- package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
- package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
- package/dist/esm/stores/form/FormStore.js +1 -1
- package/dist/esm/stores/form/FormStore.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 +2 -2
- package/dist/esm/stores/form/useFormStore.js.map +1 -1
- package/dist/esm/stores/header/useHeaderStore.js +3 -3
- package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
- package/dist/esm/stores/inputMode/useInputModeStore.js.map +1 -1
- package/dist/esm/stores/navigationTabs/useNavigationTabLabel.js +22 -0
- package/dist/esm/stores/navigationTabs/useNavigationTabLabel.js.map +1 -0
- package/dist/esm/stores/navigationTabs/useNavigationTabsStore.js +62 -0
- package/dist/esm/stores/navigationTabs/useNavigationTabsStore.js.map +1 -0
- package/dist/esm/stores/navigationTabs/utils.js +92 -0
- package/dist/esm/stores/navigationTabs/utils.js.map +1 -0
- package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js +3 -3
- 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 +3 -3
- 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/utils.js.map +1 -1
- package/dist/esm/stores/settings/SettingsStore.js +3 -3
- package/dist/esm/stores/settings/SettingsStore.js.map +1 -1
- package/dist/esm/stores/settings/createSettingsStore.js +122 -96
- package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
- package/dist/esm/stores/settings/types.d.ts +0 -2
- package/dist/esm/stores/settings/types.d.ts.map +1 -1
- package/dist/esm/stores/settings/types.js.map +1 -1
- package/dist/esm/stores/settings/useSettingsActions.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/widget.d.ts +19 -2
- package/dist/esm/types/widget.d.ts.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/deepEqual.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/item.js.map +1 -1
- package/dist/esm/utils/{variant.js → mode.js} +2 -2
- package/dist/esm/utils/mode.js.map +1 -0
- package/dist/esm/utils/prepareActions.js +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 +1 -1
- package/dist/esm/utils/token.js.map +1 -1
- package/dist/esm/utils/tokenList.js.map +1 -1
- package/package.json +11 -11
- package/src/App.tsx +7 -7
- package/src/AppDrawer.tsx +77 -78
- package/src/AppDrawerContext.ts +2 -2
- package/src/components/BaseTransactionButton/BaseTransactionButton.tsx +1 -0
- package/src/components/BottomSheet/BottomSheet.tsx +56 -52
- package/src/components/Header/CloseDrawerButton.tsx +5 -1
- package/src/components/Header/Header.tsx +20 -18
- package/src/components/Header/HeaderNavigationTabs.tsx +25 -0
- package/src/components/Header/HeaderTabs.tsx +48 -0
- package/src/components/Header/NavigationHeader.tsx +11 -8
- package/src/components/ReverseTokensButton/ReverseTokensButton.tsx +4 -1
- package/src/components/Skeleton/WidgetSkeleton.tsx +1 -1
- package/src/components/Tabs/NavigationTabs.tsx +3 -0
- package/src/components/TokenList/TokenDetailsSheet.tsx +9 -7
- package/src/components/TokenList/TokenDetailsSheetContent.tsx +176 -177
- package/src/components/TokenList/useTokenSelect.ts +2 -2
- package/src/config/version.ts +1 -1
- package/src/hooks/useSwapOnly.ts +2 -5
- package/src/hooks/useToAddressRequirements.ts +2 -2
- package/src/pages/MainPage/ReviewButton.tsx +2 -2
- package/src/pages/SendToWallet/BookmarkAddressSheet.tsx +176 -185
- package/src/pages/SendToWallet/ConfirmAddressSheet.tsx +9 -6
- package/src/pages/SettingsPage/SettingsCard/SettingCardExpandable.tsx +58 -65
- package/src/pages/SettingsPage/SettingsCard/SettingsAccordian.tsx +4 -4
- package/src/pages/TransactionPage/ConfirmToAddressSheet.tsx +9 -6
- package/src/pages/TransactionPage/ExchangeRateBottomSheet.tsx +53 -58
- package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +24 -21
- package/src/pages/TransactionPage/TransactionExecutionContent.tsx +8 -6
- package/src/providers/QueryClientProvider.tsx +2 -2
- package/src/providers/SDKClientProvider.tsx +3 -7
- package/src/providers/WidgetProvider/WidgetProvider.tsx +6 -7
- package/src/stores/StoreProvider.tsx +3 -10
- package/src/stores/bookmarks/BookmarkStore.tsx +4 -4
- package/src/stores/chains/ChainOrderStore.tsx +4 -4
- package/src/stores/form/FormStore.tsx +2 -2
- package/src/stores/form/useFormStore.ts +2 -2
- package/src/stores/header/useHeaderStore.tsx +3 -5
- package/src/stores/navigationTabs/types.ts +27 -0
- package/src/stores/navigationTabs/useNavigationTabLabel.ts +28 -0
- package/src/stores/navigationTabs/useNavigationTabsStore.tsx +108 -0
- package/src/stores/navigationTabs/utils.ts +134 -0
- package/src/stores/pinnedTokens/PinnedTokensStore.tsx +4 -4
- package/src/stores/routes/RouteExecutionStore.tsx +4 -4
- package/src/stores/settings/SettingsStore.tsx +4 -4
- package/src/stores/settings/createSettingsStore.ts +48 -12
- package/src/stores/settings/types.ts +1 -16
- package/src/types/widget.ts +31 -1
- package/dist/esm/components/Header/SplitNavigationTabs.js +0 -33
- package/dist/esm/components/Header/SplitNavigationTabs.js.map +0 -1
- package/dist/esm/stores/settings/useSplitModeStore.js +0 -36
- package/dist/esm/stores/settings/useSplitModeStore.js.map +0 -1
- package/dist/esm/utils/variant.js.map +0 -1
- package/src/components/Header/SplitNavigationTabs.tsx +0 -32
- package/src/stores/settings/useSplitModeStore.tsx +0 -58
- /package/src/utils/{variant.ts → mode.ts} +0 -0
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { allLanguages } from "../../providers/I18nProvider/constants.js";
|
|
2
2
|
import { loadLocale } from "../../providers/I18nProvider/i18n.js";
|
|
3
|
+
import { getConfigItemSets, isItemAllowedForSets } from "../../utils/item.js";
|
|
3
4
|
import { SettingsToolTypes } from "./types.js";
|
|
4
5
|
import { getStateValues } from "./utils/getStateValues.js";
|
|
5
6
|
import { create } from "zustand";
|
|
@@ -20,106 +21,131 @@ const defaultSettings = {
|
|
|
20
21
|
_enabledExchanges: {},
|
|
21
22
|
smallBalanceThreshold: void 0
|
|
22
23
|
};
|
|
23
|
-
const createSettingsStore = (config) =>
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
const updatedState = { ...state };
|
|
33
|
-
if (!reset) {
|
|
34
|
-
tools.forEach((tool) => {
|
|
35
|
-
if (!Object.hasOwn(updatedState[`_enabled${toolType}`], tool)) updatedState[`_enabled${toolType}`][tool] = true;
|
|
36
|
-
});
|
|
37
|
-
updatedState[`_enabled${toolType}`] = Object.fromEntries(Object.entries(updatedState[`_enabled${toolType}`]).filter(([key]) => tools.includes(key)));
|
|
38
|
-
} else tools.forEach((tool) => {
|
|
39
|
-
updatedState[`_enabled${toolType}`][tool] = true;
|
|
40
|
-
});
|
|
41
|
-
const enabledToolKeys = Object.keys(updatedState[`_enabled${toolType}`]);
|
|
42
|
-
updatedState[`enabled${toolType}`] = enabledToolKeys.filter((key) => updatedState[`_enabled${toolType}`][key]);
|
|
43
|
-
updatedState[`disabled${toolType}`] = enabledToolKeys.filter((key) => !updatedState[`_enabled${toolType}`][key]);
|
|
44
|
-
return updatedState;
|
|
45
|
-
});
|
|
46
|
-
},
|
|
47
|
-
setToolValue: (toolType, tool, value) => set((state) => {
|
|
48
|
-
const enabledTools = {
|
|
49
|
-
...state[`_enabled${toolType}`],
|
|
50
|
-
[tool]: value
|
|
51
|
-
};
|
|
52
|
-
const enabledToolKeys = Object.keys(enabledTools);
|
|
24
|
+
const createSettingsStore = (config) => {
|
|
25
|
+
const configItemsByToolType = {
|
|
26
|
+
Bridges: config.bridges,
|
|
27
|
+
Exchanges: config.exchanges
|
|
28
|
+
};
|
|
29
|
+
const buildToolState = (toolType, enabledMap) => {
|
|
30
|
+
const configItemSets = getConfigItemSets(configItemsByToolType[toolType], (items) => new Set(items));
|
|
31
|
+
const allowed = Object.fromEntries(Object.entries(enabledMap).filter(([key]) => isItemAllowedForSets(key, configItemSets)));
|
|
32
|
+
const keys = Object.keys(allowed);
|
|
53
33
|
return {
|
|
54
|
-
[`_enabled${toolType}`]:
|
|
55
|
-
[`enabled${toolType}`]:
|
|
56
|
-
[`disabled${toolType}`]:
|
|
57
|
-
};
|
|
58
|
-
}),
|
|
59
|
-
toggleToolKeys: (toolType, toolKeys) => set((state) => {
|
|
60
|
-
const allKeysInCollectionEnabled = toolKeys.every((toolKey) => state[`_enabled${toolType}`][toolKey]);
|
|
61
|
-
const updatedTools = toolKeys.reduce((accum, toolKey) => {
|
|
62
|
-
accum[toolKey] = !allKeysInCollectionEnabled;
|
|
63
|
-
return accum;
|
|
64
|
-
}, { ...state[`_enabled${toolType}`] });
|
|
65
|
-
const enableKeys = [];
|
|
66
|
-
const disabledKeys = [];
|
|
67
|
-
Object.entries(updatedTools).forEach(([key, value]) => {
|
|
68
|
-
if (value) enableKeys.push(key);
|
|
69
|
-
else disabledKeys.push(key);
|
|
70
|
-
});
|
|
71
|
-
return {
|
|
72
|
-
[`_enabled${toolType}`]: updatedTools,
|
|
73
|
-
[`enabled${toolType}`]: enableKeys,
|
|
74
|
-
[`disabled${toolType}`]: disabledKeys
|
|
75
|
-
};
|
|
76
|
-
}),
|
|
77
|
-
reset: (bridges, exchanges) => {
|
|
78
|
-
set(() => ({
|
|
79
|
-
...defaultSettings,
|
|
80
|
-
...defaultConfigurableSettings
|
|
81
|
-
}));
|
|
82
|
-
get().initializeTools("Bridges", bridges, true);
|
|
83
|
-
get().initializeTools("Exchanges", exchanges, true);
|
|
84
|
-
return { ...get() };
|
|
85
|
-
}
|
|
86
|
-
}), {
|
|
87
|
-
name: "li.fi-widget-settings",
|
|
88
|
-
version: 6,
|
|
89
|
-
partialize: (state) => {
|
|
90
|
-
const { disabledBridges, disabledExchanges, enabledBridges, enabledExchanges, ...partializedState } = state;
|
|
91
|
-
return partializedState;
|
|
92
|
-
},
|
|
93
|
-
merge: (persistedState, currentState) => {
|
|
94
|
-
const state = {
|
|
95
|
-
...currentState,
|
|
96
|
-
...persistedState
|
|
34
|
+
[`_enabled${toolType}`]: allowed,
|
|
35
|
+
[`enabled${toolType}`]: keys.filter((key) => allowed[key]),
|
|
36
|
+
[`disabled${toolType}`]: keys.filter((key) => !allowed[key])
|
|
97
37
|
};
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
38
|
+
};
|
|
39
|
+
const toEnabledMap = (keys = []) => Object.fromEntries(keys.map((key) => [key, true]));
|
|
40
|
+
const initialSettings = {
|
|
41
|
+
...defaultSettings,
|
|
42
|
+
...buildToolState("Bridges", toEnabledMap(config.bridges?.allow)),
|
|
43
|
+
...buildToolState("Exchanges", toEnabledMap(config.exchanges?.allow))
|
|
44
|
+
};
|
|
45
|
+
return create()(persist((set, get) => ({
|
|
46
|
+
...initialSettings,
|
|
47
|
+
setValue: (key, value) => set(() => ({ [key]: value })),
|
|
48
|
+
setValues: (values) => set(() => ({ ...values })),
|
|
49
|
+
getSettings: () => getStateValues(get()),
|
|
50
|
+
getValue: (key) => get()[key],
|
|
51
|
+
initializeTools: (toolType, tools, reset) => {
|
|
52
|
+
if (!tools.length) return;
|
|
53
|
+
set((state) => {
|
|
54
|
+
const updatedState = { ...state };
|
|
55
|
+
if (!reset) {
|
|
56
|
+
tools.forEach((tool) => {
|
|
57
|
+
if (!Object.hasOwn(updatedState[`_enabled${toolType}`], tool)) updatedState[`_enabled${toolType}`][tool] = true;
|
|
58
|
+
});
|
|
59
|
+
updatedState[`_enabled${toolType}`] = Object.fromEntries(Object.entries(updatedState[`_enabled${toolType}`]).filter(([key]) => tools.includes(key)));
|
|
60
|
+
} else tools.forEach((tool) => {
|
|
61
|
+
updatedState[`_enabled${toolType}`][tool] = true;
|
|
115
62
|
});
|
|
63
|
+
const enabledToolKeys = Object.keys(updatedState[`_enabled${toolType}`]);
|
|
64
|
+
updatedState[`enabled${toolType}`] = enabledToolKeys.filter((key) => updatedState[`_enabled${toolType}`][key]);
|
|
65
|
+
updatedState[`disabled${toolType}`] = enabledToolKeys.filter((key) => !updatedState[`_enabled${toolType}`][key]);
|
|
66
|
+
return updatedState;
|
|
116
67
|
});
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
68
|
+
},
|
|
69
|
+
setToolValue: (toolType, tool, value) => set((state) => {
|
|
70
|
+
const enabledTools = {
|
|
71
|
+
...state[`_enabled${toolType}`],
|
|
72
|
+
[tool]: value
|
|
73
|
+
};
|
|
74
|
+
const enabledToolKeys = Object.keys(enabledTools);
|
|
75
|
+
return {
|
|
76
|
+
[`_enabled${toolType}`]: enabledTools,
|
|
77
|
+
[`enabled${toolType}`]: enabledToolKeys.filter((key) => enabledTools[key]),
|
|
78
|
+
[`disabled${toolType}`]: enabledToolKeys.filter((key) => !enabledTools[key])
|
|
79
|
+
};
|
|
80
|
+
}),
|
|
81
|
+
toggleToolKeys: (toolType, toolKeys) => set((state) => {
|
|
82
|
+
const allKeysInCollectionEnabled = toolKeys.every((toolKey) => state[`_enabled${toolType}`][toolKey]);
|
|
83
|
+
const updatedTools = toolKeys.reduce((accum, toolKey) => {
|
|
84
|
+
accum[toolKey] = !allKeysInCollectionEnabled;
|
|
85
|
+
return accum;
|
|
86
|
+
}, { ...state[`_enabled${toolType}`] });
|
|
87
|
+
const enableKeys = [];
|
|
88
|
+
const disabledKeys = [];
|
|
89
|
+
Object.entries(updatedTools).forEach(([key, value]) => {
|
|
90
|
+
if (value) enableKeys.push(key);
|
|
91
|
+
else disabledKeys.push(key);
|
|
92
|
+
});
|
|
93
|
+
return {
|
|
94
|
+
[`_enabled${toolType}`]: updatedTools,
|
|
95
|
+
[`enabled${toolType}`]: enableKeys,
|
|
96
|
+
[`disabled${toolType}`]: disabledKeys
|
|
97
|
+
};
|
|
98
|
+
}),
|
|
99
|
+
reset: (bridges, exchanges) => {
|
|
100
|
+
set(() => ({
|
|
101
|
+
...defaultSettings,
|
|
102
|
+
...defaultConfigurableSettings
|
|
103
|
+
}));
|
|
104
|
+
get().initializeTools("Bridges", bridges, true);
|
|
105
|
+
get().initializeTools("Exchanges", exchanges, true);
|
|
106
|
+
return { ...get() };
|
|
107
|
+
}
|
|
108
|
+
}), {
|
|
109
|
+
name: "li.fi-widget-settings",
|
|
110
|
+
version: 6,
|
|
111
|
+
partialize: (state) => {
|
|
112
|
+
const { disabledBridges, disabledExchanges, enabledBridges, enabledExchanges, ...partializedState } = state;
|
|
113
|
+
return partializedState;
|
|
114
|
+
},
|
|
115
|
+
merge: (persistedState, currentState) => {
|
|
116
|
+
const state = {
|
|
117
|
+
...currentState,
|
|
118
|
+
...persistedState
|
|
119
|
+
};
|
|
120
|
+
SettingsToolTypes.forEach((toolType) => {
|
|
121
|
+
const persistedEnabled = persistedState?.[`_enabled${toolType}`];
|
|
122
|
+
if (persistedEnabled) {
|
|
123
|
+
const allowMap = toEnabledMap(configItemsByToolType[toolType]?.allow);
|
|
124
|
+
Object.assign(state, buildToolState(toolType, {
|
|
125
|
+
...allowMap,
|
|
126
|
+
...persistedEnabled
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
return state;
|
|
131
|
+
},
|
|
132
|
+
migrate: () => ({}),
|
|
133
|
+
onRehydrateStorage: () => {
|
|
134
|
+
const initializeLanguageSettings = async (state, initialLanguage) => {
|
|
135
|
+
const customLanguages = Object.keys(config?.languageResources || {}).filter((key) => !allLanguages.includes(key));
|
|
136
|
+
if (initialLanguage && initialLanguage !== "en" && !customLanguages.includes(initialLanguage)) await loadLocale(initialLanguage, config?.languageResources?.[initialLanguage]).then((languageResource) => {
|
|
137
|
+
state.setValues({
|
|
138
|
+
language: initialLanguage,
|
|
139
|
+
languageCache: languageResource
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
};
|
|
143
|
+
return (state) => {
|
|
144
|
+
if (state) initializeLanguageSettings(state, state.getValue("language") || config?.languages?.default);
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
}));
|
|
148
|
+
};
|
|
123
149
|
//#endregion
|
|
124
150
|
export { createSettingsStore, defaultConfigurableSettings };
|
|
125
151
|
|
|
@@ -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 { getConfigItemSets, isItemAllowedForSets } from '../../utils/item.js'\nimport type { SettingsProps, SettingsState, SettingsToolType } 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 const configItemsByToolType = {\n Bridges: config.bridges,\n Exchanges: config.exchanges,\n }\n // Tool state from a candidate map, keeping only config-allowed tools.\n const buildToolState = (\n toolType: SettingsToolType,\n enabledMap: Record<string, boolean>\n ) => {\n const configItemSets = getConfigItemSets(\n configItemsByToolType[toolType],\n (items) => new Set(items)\n )\n const allowed: Record<string, boolean> = Object.fromEntries(\n Object.entries(enabledMap).filter(([key]) =>\n isItemAllowedForSets(key, configItemSets)\n )\n )\n const keys = Object.keys(allowed)\n return {\n [`_enabled${toolType}`]: allowed,\n [`enabled${toolType}`]: keys.filter((key) => allowed[key]),\n [`disabled${toolType}`]: keys.filter((key) => !allowed[key]),\n }\n }\n const toEnabledMap = (keys: string[] = []): Record<string, boolean> =>\n Object.fromEntries(keys.map((key) => [key, true] as const))\n // Deny-only configs can't be seeded; the tool universe is unknown until /tools.\n const initialSettings: SettingsProps = {\n ...defaultSettings,\n ...buildToolState('Bridges', toEnabledMap(config.bridges?.allow)),\n ...buildToolState('Exchanges', toEnabledMap(config.exchanges?.allow)),\n }\n return create<SettingsState>()(\n persist(\n (set, get) => ({\n ...initialSettings,\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 const persistedEnabled = persistedState?.[`_enabled${toolType}`]\n if (persistedEnabled) {\n // Overlay persisted toggles on the config allow seed so an empty\n // intersection keeps the allow-list instead of going unrestricted.\n const allowMap = toEnabledMap(\n configItemsByToolType[toolType]?.allow\n )\n Object.assign(\n state,\n buildToolState(toolType, { ...allowMap, ...persistedEnabled })\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}\n"],"mappings":"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"}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
import { LanguageResource } from "../../providers/I18nProvider/types.js";
|
|
2
2
|
import { Order } from "@lifi/sdk";
|
|
3
|
-
import { PropsWithChildren } from "react";
|
|
4
|
-
import { StoreApi, UseBoundStore } from "zustand";
|
|
5
3
|
|
|
6
4
|
//#region src/stores/settings/types.d.ts
|
|
7
5
|
interface SettingsProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/stores/settings/types.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","names":[],"sources":["../../../../src/stores/settings/types.ts"],"mappings":";;;;UAciB,aAAA;EACf,QAAA;EACA,QAAA;EACA,aAAA,GAAgB,gBAAA;EAChB,mBAAA;EACA,aAAA,GAAgB,KAAA;EAChB,iBAAA;EACA,QAAA;EACA,eAAA;EACA,cAAA;EACA,eAAA,EAAiB,MAAA;EACjB,iBAAA;EACA,gBAAA;EACA,iBAAA,EAAmB,MAAA;EACnB,qBAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/stores/settings/types.ts"],"sourcesContent":["import type { Order } from '@lifi/sdk'\nimport type {
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../src/stores/settings/types.ts"],"sourcesContent":["import type { Order } from '@lifi/sdk'\nimport type { LanguageResource } from '../../providers/I18nProvider/types.js'\nimport type { WidgetConfig } from '../../types/widget.js'\n\nexport type ValueSetter<S> = <K extends keyof S>(\n key: K,\n value: S[Extract<K, string>]\n) => void\n\ntype ValueGetter<S> = <K extends keyof S>(key: K) => S[K]\n\nexport const SettingsToolTypes = ['Bridges', 'Exchanges'] as const\nexport type SettingsToolType = (typeof SettingsToolTypes)[number]\n\nexport interface SettingsProps {\n gasPrice?: string\n language?: string\n languageCache?: LanguageResource\n lastDefaultLanguage?: string\n routePriority?: Order\n enabledAutoRefuel: boolean\n slippage?: string\n disabledBridges: string[]\n enabledBridges: string[]\n _enabledBridges: Record<string, boolean>\n disabledExchanges: string[]\n enabledExchanges: string[]\n _enabledExchanges: Record<string, boolean>\n smallBalanceThreshold?: string\n}\n\nexport interface SettingsActions {\n setValue: ValueSetter<SettingsProps>\n setValues: (values: Partial<SettingsProps>) => void\n getValue: ValueGetter<SettingsProps>\n getSettings: () => SettingsProps\n initializeTools(\n toolType: SettingsToolType,\n tools: string[],\n reset?: boolean\n ): void\n setToolValue(toolType: SettingsToolType, tool: string, value: boolean): void\n toggleToolKeys(toolType: SettingsToolType, toolKeys: string[]): void\n reset(bridges: string[], exchanges: string[]): void\n}\n\nexport type SettingsState = SettingsProps & SettingsActions\n\nexport interface SettingsStoreProviderProps {\n config: WidgetConfig\n}\n"],"mappings":";AAWA,MAAa,oBAAoB,CAAC,WAAW,WAAW"}
|
|
@@ -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 = (config?.slippage || 0) * 100\n const defaultRoutePriority = config?.routePriority\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,YAAY;CAExC,gBAAgB,GAAG,IAAI;CAEvB,MAAM,cAAc,QAAQ,YAAY;CAExC,IAAI,CAAC,UAAU,aAAa,WAAW,GACpC,OAAQ,KAAK,WAAW,
|
|
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 = (config?.slippage || 0) * 100\n const defaultRoutePriority = config?.routePriority\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,YAAY;CAExC,gBAAgB,GAAG,IAAI;CAEvB,MAAM,cAAc,QAAQ,YAAY;CAExC,IAAI,CAAC,UAAU,aAAa,WAAW,GACpC,OAAQ,KAAK,WAAW,CAAC,CAA6B,SACpD,YAAY;EACX,IAAI,CAAC,UAAU,YAAY,UAAU,YAAY,QAAQ,GACvD,QAAQ,KAAA,kBAAiC;GACvC,SAAS;GACT,UAAU,YAAY;GACtB,UAAU,YAAY;GACT;GACA;EACf,CAAC;CAEL,CACF;AAEJ;AAEA,MAAa,2BAWR;CACH,MAAM,UAAU,gBAAgB;CAChC,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;CACxB,EAAE;CAEF,MAAM,2BAA2B,aAC9B,OAAO,aAAa;EACnB,MAAM,UAAU;EAChB,kBAAkB,SAAS,SAAS,QAAQ,UAAU,SAAS,QAAQ;CACzE,GACA,CAAC,SAAS,OAAO,CACnB;CAmFA,OAAO;EACL,UAAU;EACV,WAnFgC,aAC/B,WAAmC;GAClC,OAAO,QAAQ,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,WAAW;IAC/C,yBAAyB,KAA4B,KAAK;GAC5D,CAAC;EACH,GACA,CAAC,wBAAwB,CA6EU;EACnC,oBA3E0C,aACzC,WAA0B;GACzB,MAAM,WAAW,QAAQ,SAAS,UAAU;GAC5C,MAAM,gBAAgB,QAAQ,SAAS,eAAe;GACtD,MAAM,WAAW,QAAQ,SAAS,UAAU;GAE5C,MAAM,mBAAmB,QAAQ,YAAY,KAAK;GAClD,MAAM,uBAAuB,QAAQ;GAErC,4BAA4B,YAC1B,mBAAmB,4BAA4B,SAAA,EAC9C,SAAS;GAEZ,4BAA4B,gBAC1B,wBAAwB,4BAA4B;GAEtD,IAAI,CAAC,UACH,yBACE,YACA,4BAA4B,QAC9B;GAEF,IAAI,CAAC,eACH,yBACE,iBACA,4BAA4B,aAC9B;GAEF,IAAI,CAAC,UACH,yBACE,YACA,4BAA4B,QAC9B;EAEJ,GACA,CAAC,SAAS,wBAAwB,CAwCoB;EACtD,eAtC6B,aAC5B,SAAmB,cAAwB;GAC1C,kBAAkB,SAAS,SAAS,QAAQ,OAAO,SAAS,SAAS;EACvE,GACA,CAAC,SAAS,OAAO,CAkCmB;EACpC,cAhCoC,aACnC,UAA4B,MAAc,UAAmB;GAC5D,kBACE,SACA,SACA,QAAQ,cACR,UACA,MACA,KACF;EACF,GACA,CAAC,SAAS,OAAO,CAqByB;EAC1C,gBAnBsC,aACrC,UAA4B,aAAuB;GAClD,kBACE,SACA,SACA,QAAQ,gBACR,UACA,QACF;EACF,GACA,CAAC,SAAS,OAAO,CAS6B;CAChD;AACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createTheme.js","names":["createTheme","createMuiTheme"],"sources":["../../../src/themes/createTheme.ts"],"sourcesContent":["import type {\n CSSObject,\n Shape,\n SimplePaletteColorOptions,\n Theme,\n} from '@mui/material'\nimport {\n alpha,\n buttonClasses,\n createTheme as createMuiTheme,\n css,\n darken,\n keyframes,\n lighten,\n tabsClasses,\n touchRippleClasses,\n} from '@mui/material'\nimport type { WidgetTheme } from '../types/widget.js'\nimport { palette, paletteDark, paletteLight } from './palettes.js'\nimport type {} from './types.js'\nimport { getStyleOverrides } from './utils.js'\n\nconst shape: Shape = {\n borderRadius: 12,\n borderRadiusSecondary: 12,\n borderRadiusTertiary: 24,\n}\n\nconst enterKeyframe = keyframes`\n 0% {\n transform: scale(0);\n opacity: 0.05;\n }\n 100% {\n transform: scale(1);\n opacity: 0.1;\n }\n`\n\nexport const createTheme = (widgetTheme: WidgetTheme = {}): Theme => {\n const configuredPaletteLight = widgetTheme.colorSchemes?.light?.palette\n const configuredPaletteDark = widgetTheme.colorSchemes?.dark?.palette\n\n const primaryMainColorLight =\n (configuredPaletteLight?.primary as SimplePaletteColorOptions)?.main ??\n palette.primary.main\n const primaryMainColorDark =\n (configuredPaletteDark?.primary as SimplePaletteColorOptions)?.main ??\n palette.primary.main\n\n const primaryLightenColorLight = lighten(primaryMainColorLight, 0.84)\n const primaryDarkenColorLight = darken(primaryMainColorLight, 0.2)\n const primaryLightenColorDark =\n primaryMainColorLight === primaryMainColorDark\n ? primaryLightenColorLight\n : lighten(primaryMainColorDark, 0.84)\n const primaryDarkenColorDark =\n primaryMainColorLight === primaryMainColorDark\n ? primaryDarkenColorLight\n : darken(primaryMainColorDark, 0.2)\n\n const secondaryMainColorLight =\n (configuredPaletteLight?.secondary as SimplePaletteColorOptions)?.main ??\n palette.secondary.main\n const secondaryMainColorDark =\n (configuredPaletteDark?.secondary as SimplePaletteColorOptions)?.main ??\n palette.secondary.main\n\n const secondaryLightenColorLight = lighten(secondaryMainColorLight, 0.84)\n const secondaryDarkenColorLight = darken(secondaryMainColorLight, 0.2)\n const secondaryLightenColorDark =\n secondaryMainColorLight === secondaryMainColorDark\n ? secondaryLightenColorLight\n : lighten(secondaryMainColorDark, 0.84)\n const secondaryDarkenColorDark =\n secondaryMainColorLight === secondaryMainColorDark\n ? secondaryDarkenColorLight\n : darken(secondaryMainColorDark, 0.2)\n\n const theme = createMuiTheme({\n cssVariables: {\n cssVarPrefix: 'lifi',\n colorSchemeSelector: 'class',\n nativeColor: true,\n },\n colorSchemes: {\n light: {\n palette: {\n ...palette,\n ...paletteLight,\n ...widgetTheme.colorSchemes?.light?.palette,\n primary: {\n main: primaryMainColorLight,\n light: primaryLightenColorLight,\n dark: primaryDarkenColorLight,\n },\n secondary: {\n main: secondaryMainColorLight,\n light: secondaryLightenColorLight,\n dark: secondaryDarkenColorLight,\n },\n },\n },\n dark: {\n palette: {\n ...palette,\n ...paletteDark,\n ...widgetTheme.colorSchemes?.dark?.palette,\n primary: {\n main: primaryMainColorDark,\n light: primaryLightenColorDark,\n dark: primaryDarkenColorDark,\n },\n secondary: {\n main: secondaryMainColorDark,\n light: secondaryLightenColorDark,\n dark: secondaryDarkenColorDark,\n },\n },\n },\n },\n container: widgetTheme.container,\n routesContainer: widgetTheme.routesContainer,\n chainSidebarContainer: widgetTheme.chainSidebarContainer,\n header: widgetTheme.header,\n navigation: {\n edge: true,\n ...widgetTheme.navigation,\n },\n typography: {\n fontFamily: 'Inter, sans-serif',\n ...widgetTheme.typography,\n },\n shape: {\n ...shape,\n ...widgetTheme.shape,\n },\n breakpoints: {\n values: {\n xs: 360,\n sm: 416,\n md: 900,\n lg: 1200,\n xl: 1536,\n },\n },\n components: {\n MuiScopedCssBaseline: {\n styleOverrides: {\n root: {\n fontFamily: 'Inter, sans-serif',\n ...widgetTheme.typography,\n },\n },\n },\n MuiAppBar: {\n styleOverrides: {\n root: ({ ownerState }) => ({\n minHeight: 40,\n padding: 0,\n ...getStyleOverrides('MuiAppBar', 'root', widgetTheme, ownerState),\n }),\n },\n },\n MuiCard: {\n defaultProps: {\n variant: 'outlined',\n ...widgetTheme.components?.MuiCard?.defaultProps,\n },\n styleOverrides: {\n root: ({ ownerState, theme }) => {\n const root = widgetTheme.components?.MuiCard?.styleOverrides\n ?.root as CSSObject\n const rootHover = root?.['&:hover']\n return {\n backgroundColor: theme.vars.palette.background.paper,\n backgroundImage: 'none',\n borderRadius: theme.vars.shape.borderRadius,\n overflow: 'hidden',\n position: 'relative',\n boxSizing: 'border-box',\n transition: theme.transitions.create(\n ['background-color', 'filter'],\n {\n duration: theme.transitions.duration.enteringScreen,\n easing: theme.transitions.easing.easeOut,\n }\n ),\n ...(!!ownerState.onClick && {\n '&:hover': {\n cursor: 'pointer',\n },\n }),\n ...(!!ownerState.onClick &&\n (ownerState.variant === 'outlined' ||\n ownerState.variant === 'filled') && {\n '&:hover': {\n cursor: 'pointer',\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.background.paper} 98%, black)`,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.background.paper} 98%, white)`,\n }),\n },\n }),\n ...(!!ownerState.onClick &&\n ownerState.variant === 'elevation' && {\n '&:hover': {\n cursor: 'pointer',\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 8%, transparent))`,\n ...theme.applyStyles('dark', {\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.background} 8%, transparent))`,\n }),\n },\n }),\n ...(typeof root === 'object' && root),\n ...(!!ownerState.onClick &&\n !!rootHover && {\n '&:hover': {\n ...rootHover,\n ...theme.applyStyles('dark', {\n ...rootHover,\n }),\n },\n }),\n ...(!ownerState.onClick && {\n '&:hover': {},\n }),\n }\n },\n },\n variants: widgetTheme.components?.MuiCard?.variants ?? [\n {\n props: { variant: 'outlined' },\n style: ({ theme }) => ({\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: theme.vars.palette.grey[300],\n ...theme.applyStyles('dark', {\n borderColor: theme.vars.palette.grey[800],\n }),\n }),\n },\n {\n props: { variant: 'elevation' },\n style: ({ theme }) => ({\n border: 'none',\n boxShadow: 'none',\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent))`,\n ...theme.applyStyles('dark', {\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.background} 4%, transparent))`,\n }),\n }),\n },\n {\n props: { variant: 'filled' },\n style: {\n border: 'none',\n },\n },\n ],\n },\n MuiInputCard: {\n ...widgetTheme.components?.MuiInputCard,\n },\n MuiButtonBase: {\n styleOverrides: {\n // This `css()` function invokes keyframes. `styled-components` only supports keyframes\n // in string templates. Do not convert these styles in JS object as it will break.\n root: css`\n &\n .${touchRippleClasses.ripple}.${touchRippleClasses.rippleVisible} {\n opacity: 0.1;\n animation-name: ${enterKeyframe};\n }\n `,\n },\n },\n MuiButton: {\n defaultProps: {\n disableElevation: true,\n ...widgetTheme.components?.MuiButton?.defaultProps,\n },\n styleOverrides: {\n root: ({ theme, ownerState }) => ({\n borderRadius: theme.vars.shape.borderRadiusSecondary,\n textTransform: 'none',\n fontSize: 16,\n fontWeight: 600,\n '&.Mui-disabled, &.Mui-disabled:hover': {\n color: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 56%, transparent)`,\n cursor: 'not-allowed',\n pointerEvents: 'auto',\n },\n [`&.${buttonClasses.loading}.Mui-disabled`]: {\n backgroundColor: theme.vars.palette.primary.main,\n color: theme.palette.getContrastText(theme.palette.primary.main),\n cursor: 'auto',\n pointerEvents: 'auto',\n },\n [`.${buttonClasses.loadingIndicator}`]: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n },\n [`&.${buttonClasses.root}.${buttonClasses.loading}`]: {\n color: 'transparent',\n },\n ...getStyleOverrides('MuiButton', 'root', widgetTheme, ownerState),\n }),\n text: ({ theme, ownerState }) => ({\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 8%, transparent)`,\n color: theme.vars.palette.primary.main,\n '&:hover': {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 12%, transparent)`,\n },\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 42%, transparent)`,\n color: theme.palette.getContrastText(\n alpha(theme.palette.primary.main, 0.08)\n ),\n '&:hover': {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 56%, transparent)`,\n },\n }),\n ...getStyleOverrides('MuiButton', 'text', widgetTheme, ownerState),\n }),\n contained: ({ ownerState }) => ({\n '&:hover': {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n },\n ...getStyleOverrides(\n 'MuiButton',\n 'contained',\n widgetTheme,\n ownerState\n ),\n }),\n sizeMedium: ({ ownerState }) => ({\n padding: '10px 14px',\n ...getStyleOverrides(\n 'MuiButton',\n 'sizeMedium',\n widgetTheme,\n ownerState\n ),\n }),\n },\n },\n MuiIconButton: {\n ...widgetTheme.components?.MuiIconButton,\n styleOverrides: {\n ...widgetTheme.components?.MuiIconButton?.styleOverrides,\n root: ({ ownerState }) => ({\n color: 'inherit',\n '&:hover': {\n color: 'inherit',\n },\n ...getStyleOverrides(\n 'MuiIconButton',\n 'root',\n widgetTheme,\n ownerState\n ),\n }),\n },\n },\n MuiAvatar: {\n styleOverrides: {\n root: {\n height: 40,\n width: 40,\n },\n img: {\n objectFit: 'contain',\n },\n },\n ...widgetTheme.components?.MuiAvatar,\n },\n MuiListItemText: {\n styleOverrides: {\n primary: ({ theme }) => ({\n fontWeight: 600,\n fontSize: '1.125rem',\n lineHeight: '1.2778',\n color: theme.vars.palette.text.primary,\n }),\n secondary: ({ theme }) => ({\n fontWeight: 500,\n fontSize: '0.75rem',\n color: theme.vars.palette.text.secondary,\n }),\n },\n },\n MuiTooltip: {\n defaultProps: {\n enterDelay: 400,\n disableInteractive: true,\n arrow: true,\n placement: 'top',\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n backgroundColor: 'rgb(0 0 0 / 64%)',\n backdropFilter: 'blur(3px)',\n fontSize: '0.75rem',\n padding: theme.spacing(1, 1.5),\n }),\n arrow: {\n color: 'rgb(0 0 0 / 64%)',\n },\n },\n },\n MuiMenu: {\n styleOverrides: {\n paper: ({ theme }) => ({\n backgroundColor: theme.vars.palette.background.paper,\n backgroundImage: 'none',\n }),\n },\n },\n MuiDrawer: {\n ...widgetTheme.components?.MuiDrawer,\n styleOverrides: {\n paper: {\n backgroundImage: 'none',\n },\n ...widgetTheme.components?.MuiDrawer?.styleOverrides,\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n backgroundImage: 'none',\n },\n },\n },\n MuiTabs: {\n ...widgetTheme.components?.MuiTabs,\n styleOverrides: {\n ...widgetTheme.components?.MuiTabs?.styleOverrides,\n root: ({ theme, ownerState }) => {\n const rootStyleOverrides = getStyleOverrides(\n 'MuiTabs',\n 'root',\n widgetTheme,\n ownerState\n )\n return {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent)`,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 8%, transparent)`,\n }),\n borderRadius: theme.vars.shape.borderRadius,\n ...rootStyleOverrides,\n [`.${tabsClasses.indicator}`]: {\n backgroundColor: theme.vars.palette.background.paper,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.background} 56%, transparent)`,\n }),\n borderRadius:\n theme.shape.borderRadius > 0\n ? `calc(${theme.vars.shape.borderRadius} - 4px)`\n : theme.vars.shape.borderRadius,\n boxShadow: `0px 2px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent)`,\n ...rootStyleOverrides?.[`.${tabsClasses.indicator}`],\n },\n }\n },\n },\n },\n MuiNavigationTabs: {\n ...widgetTheme.components?.MuiNavigationTabs,\n },\n MuiNavigationTab: {\n ...widgetTheme.components?.MuiNavigationTab,\n },\n MuiCheckbox: {\n styleOverrides: {\n root: {\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n },\n ...widgetTheme.components?.MuiCheckbox,\n },\n },\n })\n\n return theme\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"createTheme.js","names":["createTheme","createMuiTheme"],"sources":["../../../src/themes/createTheme.ts"],"sourcesContent":["import type {\n CSSObject,\n Shape,\n SimplePaletteColorOptions,\n Theme,\n} from '@mui/material'\nimport {\n alpha,\n buttonClasses,\n createTheme as createMuiTheme,\n css,\n darken,\n keyframes,\n lighten,\n tabsClasses,\n touchRippleClasses,\n} from '@mui/material'\nimport type { WidgetTheme } from '../types/widget.js'\nimport { palette, paletteDark, paletteLight } from './palettes.js'\nimport type {} from './types.js'\nimport { getStyleOverrides } from './utils.js'\n\nconst shape: Shape = {\n borderRadius: 12,\n borderRadiusSecondary: 12,\n borderRadiusTertiary: 24,\n}\n\nconst enterKeyframe = keyframes`\n 0% {\n transform: scale(0);\n opacity: 0.05;\n }\n 100% {\n transform: scale(1);\n opacity: 0.1;\n }\n`\n\nexport const createTheme = (widgetTheme: WidgetTheme = {}): Theme => {\n const configuredPaletteLight = widgetTheme.colorSchemes?.light?.palette\n const configuredPaletteDark = widgetTheme.colorSchemes?.dark?.palette\n\n const primaryMainColorLight =\n (configuredPaletteLight?.primary as SimplePaletteColorOptions)?.main ??\n palette.primary.main\n const primaryMainColorDark =\n (configuredPaletteDark?.primary as SimplePaletteColorOptions)?.main ??\n palette.primary.main\n\n const primaryLightenColorLight = lighten(primaryMainColorLight, 0.84)\n const primaryDarkenColorLight = darken(primaryMainColorLight, 0.2)\n const primaryLightenColorDark =\n primaryMainColorLight === primaryMainColorDark\n ? primaryLightenColorLight\n : lighten(primaryMainColorDark, 0.84)\n const primaryDarkenColorDark =\n primaryMainColorLight === primaryMainColorDark\n ? primaryDarkenColorLight\n : darken(primaryMainColorDark, 0.2)\n\n const secondaryMainColorLight =\n (configuredPaletteLight?.secondary as SimplePaletteColorOptions)?.main ??\n palette.secondary.main\n const secondaryMainColorDark =\n (configuredPaletteDark?.secondary as SimplePaletteColorOptions)?.main ??\n palette.secondary.main\n\n const secondaryLightenColorLight = lighten(secondaryMainColorLight, 0.84)\n const secondaryDarkenColorLight = darken(secondaryMainColorLight, 0.2)\n const secondaryLightenColorDark =\n secondaryMainColorLight === secondaryMainColorDark\n ? secondaryLightenColorLight\n : lighten(secondaryMainColorDark, 0.84)\n const secondaryDarkenColorDark =\n secondaryMainColorLight === secondaryMainColorDark\n ? secondaryDarkenColorLight\n : darken(secondaryMainColorDark, 0.2)\n\n const theme = createMuiTheme({\n cssVariables: {\n cssVarPrefix: 'lifi',\n colorSchemeSelector: 'class',\n nativeColor: true,\n },\n colorSchemes: {\n light: {\n palette: {\n ...palette,\n ...paletteLight,\n ...widgetTheme.colorSchemes?.light?.palette,\n primary: {\n main: primaryMainColorLight,\n light: primaryLightenColorLight,\n dark: primaryDarkenColorLight,\n },\n secondary: {\n main: secondaryMainColorLight,\n light: secondaryLightenColorLight,\n dark: secondaryDarkenColorLight,\n },\n },\n },\n dark: {\n palette: {\n ...palette,\n ...paletteDark,\n ...widgetTheme.colorSchemes?.dark?.palette,\n primary: {\n main: primaryMainColorDark,\n light: primaryLightenColorDark,\n dark: primaryDarkenColorDark,\n },\n secondary: {\n main: secondaryMainColorDark,\n light: secondaryLightenColorDark,\n dark: secondaryDarkenColorDark,\n },\n },\n },\n },\n container: widgetTheme.container,\n routesContainer: widgetTheme.routesContainer,\n chainSidebarContainer: widgetTheme.chainSidebarContainer,\n header: widgetTheme.header,\n navigation: {\n edge: true,\n ...widgetTheme.navigation,\n },\n typography: {\n fontFamily: 'Inter, sans-serif',\n ...widgetTheme.typography,\n },\n shape: {\n ...shape,\n ...widgetTheme.shape,\n },\n breakpoints: {\n values: {\n xs: 360,\n sm: 416,\n md: 900,\n lg: 1200,\n xl: 1536,\n },\n },\n components: {\n MuiScopedCssBaseline: {\n styleOverrides: {\n root: {\n fontFamily: 'Inter, sans-serif',\n ...widgetTheme.typography,\n },\n },\n },\n MuiAppBar: {\n styleOverrides: {\n root: ({ ownerState }) => ({\n minHeight: 40,\n padding: 0,\n ...getStyleOverrides('MuiAppBar', 'root', widgetTheme, ownerState),\n }),\n },\n },\n MuiCard: {\n defaultProps: {\n variant: 'outlined',\n ...widgetTheme.components?.MuiCard?.defaultProps,\n },\n styleOverrides: {\n root: ({ ownerState, theme }) => {\n const root = widgetTheme.components?.MuiCard?.styleOverrides\n ?.root as CSSObject\n const rootHover = root?.['&:hover']\n return {\n backgroundColor: theme.vars.palette.background.paper,\n backgroundImage: 'none',\n borderRadius: theme.vars.shape.borderRadius,\n overflow: 'hidden',\n position: 'relative',\n boxSizing: 'border-box',\n transition: theme.transitions.create(\n ['background-color', 'filter'],\n {\n duration: theme.transitions.duration.enteringScreen,\n easing: theme.transitions.easing.easeOut,\n }\n ),\n ...(!!ownerState.onClick && {\n '&:hover': {\n cursor: 'pointer',\n },\n }),\n ...(!!ownerState.onClick &&\n (ownerState.variant === 'outlined' ||\n ownerState.variant === 'filled') && {\n '&:hover': {\n cursor: 'pointer',\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.background.paper} 98%, black)`,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.background.paper} 98%, white)`,\n }),\n },\n }),\n ...(!!ownerState.onClick &&\n ownerState.variant === 'elevation' && {\n '&:hover': {\n cursor: 'pointer',\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 8%, transparent))`,\n ...theme.applyStyles('dark', {\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.background} 8%, transparent))`,\n }),\n },\n }),\n ...(typeof root === 'object' && root),\n ...(!!ownerState.onClick &&\n !!rootHover && {\n '&:hover': {\n ...rootHover,\n ...theme.applyStyles('dark', {\n ...rootHover,\n }),\n },\n }),\n ...(!ownerState.onClick && {\n '&:hover': {},\n }),\n }\n },\n },\n variants: widgetTheme.components?.MuiCard?.variants ?? [\n {\n props: { variant: 'outlined' },\n style: ({ theme }) => ({\n borderWidth: 1,\n borderStyle: 'solid',\n borderColor: theme.vars.palette.grey[300],\n ...theme.applyStyles('dark', {\n borderColor: theme.vars.palette.grey[800],\n }),\n }),\n },\n {\n props: { variant: 'elevation' },\n style: ({ theme }) => ({\n border: 'none',\n boxShadow: 'none',\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent))`,\n ...theme.applyStyles('dark', {\n filter: `drop-shadow(0 1px 4px color-mix(in srgb, ${theme.vars.palette.common.background} 4%, transparent))`,\n }),\n }),\n },\n {\n props: { variant: 'filled' },\n style: {\n border: 'none',\n },\n },\n ],\n },\n MuiInputCard: {\n ...widgetTheme.components?.MuiInputCard,\n },\n MuiButtonBase: {\n styleOverrides: {\n // This `css()` function invokes keyframes. `styled-components` only supports keyframes\n // in string templates. Do not convert these styles in JS object as it will break.\n root: css`\n &\n .${touchRippleClasses.ripple}.${touchRippleClasses.rippleVisible} {\n opacity: 0.1;\n animation-name: ${enterKeyframe};\n }\n `,\n },\n },\n MuiButton: {\n defaultProps: {\n disableElevation: true,\n ...widgetTheme.components?.MuiButton?.defaultProps,\n },\n styleOverrides: {\n root: ({ theme, ownerState }) => ({\n borderRadius: theme.vars.shape.borderRadiusSecondary,\n textTransform: 'none',\n fontSize: 16,\n fontWeight: 600,\n '&.Mui-disabled, &.Mui-disabled:hover': {\n color: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 56%, transparent)`,\n cursor: 'not-allowed',\n pointerEvents: 'auto',\n },\n [`&.${buttonClasses.loading}.Mui-disabled`]: {\n backgroundColor: theme.vars.palette.primary.main,\n color: theme.palette.getContrastText(theme.palette.primary.main),\n cursor: 'auto',\n pointerEvents: 'auto',\n },\n [`.${buttonClasses.loadingIndicator}`]: {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n },\n [`&.${buttonClasses.root}.${buttonClasses.loading}`]: {\n color: 'transparent',\n },\n ...getStyleOverrides('MuiButton', 'root', widgetTheme, ownerState),\n }),\n text: ({ theme, ownerState }) => ({\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 8%, transparent)`,\n color: theme.vars.palette.primary.main,\n '&:hover': {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 12%, transparent)`,\n },\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 42%, transparent)`,\n color: theme.palette.getContrastText(\n alpha(theme.palette.primary.main, 0.08)\n ),\n '&:hover': {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.primary.main} 56%, transparent)`,\n },\n }),\n ...getStyleOverrides('MuiButton', 'text', widgetTheme, ownerState),\n }),\n contained: ({ ownerState }) => ({\n '&:hover': {\n color: theme.palette.getContrastText(theme.palette.primary.main),\n },\n ...getStyleOverrides(\n 'MuiButton',\n 'contained',\n widgetTheme,\n ownerState\n ),\n }),\n sizeMedium: ({ ownerState }) => ({\n padding: '10px 14px',\n ...getStyleOverrides(\n 'MuiButton',\n 'sizeMedium',\n widgetTheme,\n ownerState\n ),\n }),\n },\n },\n MuiIconButton: {\n ...widgetTheme.components?.MuiIconButton,\n styleOverrides: {\n ...widgetTheme.components?.MuiIconButton?.styleOverrides,\n root: ({ ownerState }) => ({\n color: 'inherit',\n '&:hover': {\n color: 'inherit',\n },\n ...getStyleOverrides(\n 'MuiIconButton',\n 'root',\n widgetTheme,\n ownerState\n ),\n }),\n },\n },\n MuiAvatar: {\n styleOverrides: {\n root: {\n height: 40,\n width: 40,\n },\n img: {\n objectFit: 'contain',\n },\n },\n ...widgetTheme.components?.MuiAvatar,\n },\n MuiListItemText: {\n styleOverrides: {\n primary: ({ theme }) => ({\n fontWeight: 600,\n fontSize: '1.125rem',\n lineHeight: '1.2778',\n color: theme.vars.palette.text.primary,\n }),\n secondary: ({ theme }) => ({\n fontWeight: 500,\n fontSize: '0.75rem',\n color: theme.vars.palette.text.secondary,\n }),\n },\n },\n MuiTooltip: {\n defaultProps: {\n enterDelay: 400,\n disableInteractive: true,\n arrow: true,\n placement: 'top',\n },\n styleOverrides: {\n tooltip: ({ theme }) => ({\n backgroundColor: 'rgb(0 0 0 / 64%)',\n backdropFilter: 'blur(3px)',\n fontSize: '0.75rem',\n padding: theme.spacing(1, 1.5),\n }),\n arrow: {\n color: 'rgb(0 0 0 / 64%)',\n },\n },\n },\n MuiMenu: {\n styleOverrides: {\n paper: ({ theme }) => ({\n backgroundColor: theme.vars.palette.background.paper,\n backgroundImage: 'none',\n }),\n },\n },\n MuiDrawer: {\n ...widgetTheme.components?.MuiDrawer,\n styleOverrides: {\n paper: {\n backgroundImage: 'none',\n },\n ...widgetTheme.components?.MuiDrawer?.styleOverrides,\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n backgroundImage: 'none',\n },\n },\n },\n MuiTabs: {\n ...widgetTheme.components?.MuiTabs,\n styleOverrides: {\n ...widgetTheme.components?.MuiTabs?.styleOverrides,\n root: ({ theme, ownerState }) => {\n const rootStyleOverrides = getStyleOverrides(\n 'MuiTabs',\n 'root',\n widgetTheme,\n ownerState\n )\n return {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent)`,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.onBackground} 8%, transparent)`,\n }),\n borderRadius: theme.vars.shape.borderRadius,\n ...rootStyleOverrides,\n [`.${tabsClasses.indicator}`]: {\n backgroundColor: theme.vars.palette.background.paper,\n ...theme.applyStyles('dark', {\n backgroundColor: `color-mix(in srgb, ${theme.vars.palette.common.background} 56%, transparent)`,\n }),\n borderRadius:\n theme.shape.borderRadius > 0\n ? `calc(${theme.vars.shape.borderRadius} - 4px)`\n : theme.vars.shape.borderRadius,\n boxShadow: `0px 2px 4px color-mix(in srgb, ${theme.vars.palette.common.onBackground} 4%, transparent)`,\n ...rootStyleOverrides?.[`.${tabsClasses.indicator}`],\n },\n }\n },\n },\n },\n MuiNavigationTabs: {\n ...widgetTheme.components?.MuiNavigationTabs,\n },\n MuiNavigationTab: {\n ...widgetTheme.components?.MuiNavigationTab,\n },\n MuiCheckbox: {\n styleOverrides: {\n root: {\n '&:hover': {\n backgroundColor: 'transparent',\n },\n },\n },\n ...widgetTheme.components?.MuiCheckbox,\n },\n },\n })\n\n return theme\n}\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../../src/themes/utils.ts"],"sourcesContent":["import type { WidgetTheme, WidgetThemeComponents } from '../types/widget.js'\n\ntype ComponentName = keyof WidgetThemeComponents\n\nexport const getStyleOverrides = (\n componentName: ComponentName,\n styleOverrideProp: string,\n theme: WidgetTheme,\n ownerState?: any\n): any => {\n const component = theme.components?.[componentName]\n const property = (component?.styleOverrides as any)?.[styleOverrideProp]\n\n if (typeof property === 'function') {\n return property({ theme, ownerState })\n }\n return property\n}\n"],"mappings":";AAIA,MAAa,qBACX,eACA,mBACA,OACA,eACQ;CAER,MAAM,aADY,MAAM,aAAa,
|
|
1
|
+
{"version":3,"file":"utils.js","names":[],"sources":["../../../src/themes/utils.ts"],"sourcesContent":["import type { WidgetTheme, WidgetThemeComponents } from '../types/widget.js'\n\ntype ComponentName = keyof WidgetThemeComponents\n\nexport const getStyleOverrides = (\n componentName: ComponentName,\n styleOverrideProp: string,\n theme: WidgetTheme,\n ownerState?: any\n): any => {\n const component = theme.components?.[componentName]\n const property = (component?.styleOverrides as any)?.[styleOverrideProp]\n\n if (typeof property === 'function') {\n return property({ theme, ownerState })\n }\n return property\n}\n"],"mappings":";AAIA,MAAa,qBACX,eACA,mBACA,OACA,eACQ;CAER,MAAM,aADY,MAAM,aAAa,eAAA,EACR,eAAA,GAAyB;CAEtD,IAAI,OAAO,aAAa,YACtB,OAAO,SAAS;EAAE;EAAO;CAAW,CAAC;CAEvC,OAAO;AACT"}
|
|
@@ -9,7 +9,9 @@ import { TypographyVariantsOptions } from "@mui/material/styles";
|
|
|
9
9
|
|
|
10
10
|
//#region src/types/widget.d.ts
|
|
11
11
|
type WidgetVariant = "compact" | "wide" | "drawer";
|
|
12
|
-
|
|
12
|
+
/** @internal Not part of the public API. */
|
|
13
|
+
type InternalWidgetMode = "limit";
|
|
14
|
+
type WidgetMode = "default" | "split" | "custom" | "refuel" | InternalWidgetMode;
|
|
13
15
|
type SplitMode = "bridge" | "swap";
|
|
14
16
|
type SplitModeOptions = {
|
|
15
17
|
defaultTab: SplitMode;
|
|
@@ -26,6 +28,14 @@ interface ModeOptions {
|
|
|
26
28
|
type: CustomMode;
|
|
27
29
|
};
|
|
28
30
|
}
|
|
31
|
+
/**
|
|
32
|
+
* Identity of a header navigation tab. Each key maps to a widget variant, mode and
|
|
33
|
+
* (optionally) mode options; labels are resolved from the key.
|
|
34
|
+
*/
|
|
35
|
+
type SplitNavigationTabKey = SplitMode;
|
|
36
|
+
/** @internal Not part of the public API. */
|
|
37
|
+
type InternalNavigationTabKey = "default" | "private" | "refuel" | "swap-advanced" | "bridge-advanced" | "limit";
|
|
38
|
+
type NavigationTabKey = InternalNavigationTabKey | SplitNavigationTabKey;
|
|
29
39
|
type Appearance = PaletteMode | "system";
|
|
30
40
|
interface NavigationProps {
|
|
31
41
|
/**
|
|
@@ -259,6 +269,13 @@ interface WidgetConfig {
|
|
|
259
269
|
variant?: WidgetVariant;
|
|
260
270
|
mode?: WidgetMode;
|
|
261
271
|
modeOptions?: ModeOptions;
|
|
272
|
+
/**
|
|
273
|
+
* Header navigation tabs, in order. When set, the widget renders a tab bar
|
|
274
|
+
* and the active tab drives the displayed flow. Each entry is a tab key.
|
|
275
|
+
*
|
|
276
|
+
* @internal Not part of the public API.
|
|
277
|
+
*/
|
|
278
|
+
_navigationTabs?: NavigationTabKey[];
|
|
262
279
|
appearance?: Appearance;
|
|
263
280
|
theme?: WidgetTheme;
|
|
264
281
|
disabledUI?: DisabledUIConfig;
|
|
@@ -328,5 +345,5 @@ declare enum ExpansionType {
|
|
|
328
345
|
ToChain = "toChain"
|
|
329
346
|
}
|
|
330
347
|
//#endregion
|
|
331
|
-
export { AllowDeny, AllowDenyItems, AllowDenySet, AllowDenySetItem, AllowDenySets, Appearance, CalculateFeeParams, CustomMode, DefaultUI, DisabledUIConfig, ExpansionType, ExplorerUrl, FieldNames, FieldValues, FormFieldOptions, FormRef, FormRefProps, FormState, HiddenUIConfig, ModeOptions, NavigationProps, PoweredByType, RequiredUIConfig, RouteLabel, RouteLabelRule, SetFieldValueFunction, SplitMode, SplitModeOptions, ToAddress, WidgetChains, WidgetConfig, WidgetConfigPartialProps, WidgetConfigProps, WidgetContractTool, WidgetDrawerProps, WidgetFeeConfig, WidgetLanguages, WidgetMode, WidgetProps, WidgetProvider, WidgetSDKConfig, WidgetTheme, WidgetThemeComponents, WidgetTokens, WidgetVariant, WidgetWalletConfig };
|
|
348
|
+
export { AllowDeny, AllowDenyItems, AllowDenySet, AllowDenySetItem, AllowDenySets, Appearance, CalculateFeeParams, CustomMode, DefaultUI, DisabledUIConfig, ExpansionType, ExplorerUrl, FieldNames, FieldValues, FormFieldOptions, FormRef, FormRefProps, FormState, HiddenUIConfig, InternalNavigationTabKey, InternalWidgetMode, ModeOptions, NavigationProps, NavigationTabKey, PoweredByType, RequiredUIConfig, RouteLabel, RouteLabelRule, SetFieldValueFunction, SplitMode, SplitModeOptions, SplitNavigationTabKey, ToAddress, WidgetChains, WidgetConfig, WidgetConfigPartialProps, WidgetConfigProps, WidgetContractTool, WidgetDrawerProps, WidgetFeeConfig, WidgetLanguages, WidgetMode, WidgetProps, WidgetProvider, WidgetSDKConfig, WidgetTheme, WidgetThemeComponents, WidgetTokens, WidgetVariant, WidgetWalletConfig };
|
|
332
349
|
//# sourceMappingURL=widget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.d.ts","names":[],"sources":["../../../src/types/widget.ts"],"mappings":";;;;;;;;;;KAoCY,aAAA;AAAA,KACA,UAAA;AAAA,
|
|
1
|
+
{"version":3,"file":"widget.d.ts","names":[],"sources":["../../../src/types/widget.ts"],"mappings":";;;;;;;;;;KAoCY,aAAA;;KAGA,kBAAA;AAAA,KACA,UAAA,+CAKR,kBAAA;AAAA,KACQ,SAAA;AAAA,KACA,gBAAA;EACV,UAAA,EAAY,SAAA;AAAA;AAAA,KAEF,UAAA;AAAA,UACK,WAAA;EAZL;AAAA;AACZ;;;EAiBE,KAAA,GAAQ,SAAA,GAAY,gBAAA;EACpB,MAAA;IAAW,IAAA,EAAM,UAAA;EAAA;AAAA;;AAZP;AACZ;;KAkBY,qBAAA,GAAwB,SAAA;;KAExB,wBAAA;AAAA,KAOA,gBAAA,GAAmB,wBAAA,GAA2B,qBAAA;AAAA,KAE9C,UAAA,GAAa,WAAA;AAAA,UACR,eAAA;EA3BL;AAAA;AACZ;;EA+BE,IAAA;AAAA;AAAA,KAEU,qBAAA,GAAwB,OAAA,CAClC,IAAA,CACE,UAAA,CAAW,KAAA;AAAA,KAeH,WAAA;EACV,YAAA;IACE,KAAA;MACE,OAAA,EAAS,cAAA;IAAA;IAEX,IAAA;MACE,OAAA,EAAS,cAAA;IAAA;EAAA;EAGb,KAAA,GAAQ,OAAA,CAAQ,KAAA;EAChB,UAAA,GAAa,yBAAA;EACb,UAAA,GAAa,qBAAA;EACb,SAAA,GAAY,aAAA;EACZ,eAAA,GAAkB,aAAA;EAClB,qBAAA,GAAwB,aAAA;EACxB,MAAA,GAAS,aAAA;EACT,UAAA,GAAa,eAAA;AAAA;AAAA,UAGE,gBAAA;EACf,UAAA;EACA,SAAA;EACA,SAAA;EACA,OAAA;AAAA;AAAA,UAGe,cAAA;EACf,2BAAA;EACA,WAAA;EACA,UAAA;EACA,eAAA;EACA,WAAA;EAxDuB;AACzB;;;EA4DE,YAAA;EACA,cAAA;EAtDF;;;;EA2DE,iBAAA;EACA,SAAA;EACA,gBAAA;EACA,iBAAA;EACA,OAAA;EACA,sBAAA;EACA,qBAAA;EACA,QAAA;;;AAhEa;AAef;;EAuDE,8BAAA;EACA,SAAA;EACA,mBAAA;EACA,oBAAA;EACA,qBAAA;EACA,gBAAA;EACA,SAAA;EACA,OAAA;EACA,UAAA;AAAA;AAAA,UAGe,gBAAA;EACf,sBAAA;EACA,SAAA;AAAA;AAAA,KAGU,SAAA;EACV,0BAAA;EACA,2BAAA;AAAA;AAAA,UAGe,kBAAA;EACf,qBAAA,GAAwB,MAAA,SAAe,SAAA;EACvC,SAAA,EAAW,IAAA,GAAO,kBAAA;;;;;;;;;EASlB,0BAAA;;;;;EAKA,6BAAA;AAAA;AAAA,UAGe,eAAA,SACP,IAAA,CACN,SAAA;EAQF,YAAA,GAAe,IAAA,CACb,YAAA;EAGF,gBAAA,GAAmB,IAAA,CAAK,gBAAA;AAAA;AAAA,UAGT,kBAAA;EACf,IAAA;EACA,OAAA;AAAA;AAAA,UAGe,kBAAA;EACf,SAAA,EAAW,aAAA;EACX,OAAA,EAAS,aAAA;EACT,SAAA,EAAW,KAAA;EACX,OAAA,EAAS,KAAA;EACT,WAAA;EACA,SAAA;EACA,UAAA;EACA,QAAA;EACA,QAAA;AAAA;AAAA,UAGe,eAAA;EACf,IAAA;EACA,OAAA;EACA,GAAA;;;;;EAKA,iBAAA;;;;;EAKA,cAAA;;;;EAIA,mBAAA,GAAsB,SAAA;;;;;;;AAnFtB;AAGF;EAyFE,YAAA,EAAc,MAAA,EAAQ,kBAAA,GAAqB,OAAA;AAAA;AAAA,UAG5B,SAAA;EACf,IAAA;EACA,OAAA;EACA,SAAA,EAAW,SAAA;EACX,OAAA;AAAA;AAAA,UAGe,SAAA;EACf,KAAA,GAAQ,CAAA;EACR,IAAA,GAAO,CAAA;AAAA;AAAA,KAGG,gBAAA;AAAA,UACK,YAAA;EACf,KAAA,GAAQ,GAAA,CAAI,gBAAA;EACZ,IAAA,GAAO,GAAA,CAAI,gBAAA;AAAA;AAAA,KAGD,aAAA;EACV,IAAA,GAAO,YAAA;EACP,EAAA,GAAK,YAAA;AAAA,IACH,YAAA;AAAA,KAEQ,cAAA;EACV,IAAA,GAAO,SAAA,CAAU,CAAA;EACjB,EAAA,GAAK,SAAA,CAAU,CAAA;AAAA,IACb,SAAA,CAAU,CAAA;AAAA,KAEF,YAAA;EACV,KAAA,GAAQ,SAAA,CAAU,SAAA;AAAA,IAChB,cAAA;AAAA,KAEQ,YAAA;EACV,QAAA,GAAW,WAAA;EACX,OAAA,GAAU,KAAA;EACV,OAAA,GAAU,WAAA;AAAA,IACR,cAAA,CAAe,SAAA;AAAA,KAEP,eAAA;EACV,OAAA,GAAU,WAAA;AAAA,IACR,SAAA,CAAU,WAAA;AAAA,KAEF,aAAA;AAAA,UAEK,UAAA;EACf,IAAA;EACA,EAAA,GAAK,OAAA,CAAQ,KAAA;AAAA;AAAA,UAGE,cAAA;EACf,KAAA,EAAO,UAAA;EAEP,OAAA,GAAU,SAAA;EACV,SAAA,GAAY,SAAA;EACZ,WAAA;EACA,SAAA;EACA,gBAAA;EACA,cAAA;EAvGe;;;AAEf;AAGF;;;EA0GE,KAAA,IAAS,KAAA,EAAO,KAAA;AAAA;AAAA,KAGN,WAAA;EAGN,GAAA;EACA,MAAA;EACA,WAAA;AAAA;AAAA,KAGM,cAAA,IACV,KAAA,EAAO,iBAAA,CAAkB,mBAAA,MACtB,SAAA;AAAA,UAEY,YAAA;EACf,SAAA;EACA,OAAA;EACA,SAAA;EACA,OAAA;EACA,SAAA,GAAY,SAAA;EACZ,WAAA,GAAc,SAAA;EACd,UAAA;EACA,gBAAA;EACA,QAAA;EACA,aAAA;EAEA,SAAA,GAAY,cAAA;EAEZ,aAAA,GAAgB,YAAA;EAChB,iBAAA,GAAoB,SAAA;EACpB,0BAAA,GAA6B,SAAA;EAC7B,wBAAA,GAA2B,SAAA;EAC3B,YAAA,GAAe,kBAAA;EACf,UAAA;EACA,MAAA;EACA,SAAA,GAAY,eAAA;EACZ,QAAA;EAEA,aAAA,GAAgB,KAAA;EAChB,QAAA;EAEA,OAAA,GAAU,aAAA;EACV,IAAA,GAAO,UAAA;EACP,WAAA,GAAc,WAAA;;;;;;;EAOd,eAAA,GAAkB,gBAAA;EAElB,UAAA,GAAa,UAAA;EACb,KAAA,GAAQ,WAAA;EAER,UAAA,GAAa,gBAAA;EACb,QAAA,GAAW,cAAA;EACX,UAAA,GAAa,gBAAA;EACb,SAAA,GAAY,SAAA;;;;;;AAxHZ;EA+HA,eAAA;EACA,gBAAA;EAEA,YAAA,GAAe,kBAAA;EACf,SAAA,GAAY,eAAA;EAEZ,QAAA;EACA,SAAA;EAEA,OAAA,GAAU,SAAA;EACV,SAAA,GAAY,SAAA;EACZ,MAAA,GAAS,YAAA;EACT,MAAA,GAAS,YAAA;EACT,SAAA,GAAY,eAAA;EACZ,iBAAA,GAAoB,iBAAA;EACpB,YAAA,GAAe,MAAA,SAAe,WAAA,MAC5B,OAAA,CAAQ,MAAA,aAAmB,WAAA;EAC7B,SAAA,GAAY,aAAA;EAxIF;AAAA;AACZ;EA4IE,WAAA,GAAc,cAAA;AAAA;AAAA,UAGC,gBAAA;EACf,iBAAA;AAAA;AAAA,UAGe,WAAA,SACP,IAAA,CAAK,kBAAA;EACb,UAAA;EACA,QAAA;EACA,SAAA,GAAY,SAAA;AAAA;AAAA,KAGF,UAAA,SAAmB,WAAA;AAAA,KAEnB,qBAAA,cAAmC,UAAA,EAC7C,GAAA,EAAK,CAAA,EACL,KAAA,EAAO,WAAA,CAAY,CAAA,GACnB,OAAA,GAAU,gBAAA;AAAA,KAGA,SAAA;EACV,aAAA,EAAe,qBAAA;AAAA;AAAA,KAGL,OAAA,GAAU,SAAA,CAAU,SAAA;AAAA,UAEf,YAAA;EACf,OAAA,GAAU,OAAA;AAAA;AAAA,UAGK,iBAAA,SAA0B,YAAA;EACzC,MAAA,EAAQ,YAAA;AAAA;AAAA,UAGO,wBAAA;EACf,MAAA,GAAS,OAAA,CAAQ,YAAA;AAAA;AAAA,KAGP,WAAA,GAAc,iBAAA,GACxB,YAAA,GACA,wBAAA,GACA,YAAA;AAAA,UAEe,iBAAA,SAA0B,wBAAA;EACzC,UAAA,GAAa,SAAA,CAAU,cAAA;EACvB,IAAA;EAnLE;AAAA;AAEJ;EAqLE,OAAA;AAAA;AAAA,aAGU,aAAA;EACV,MAAA;EACA,SAAA;EACA,OAAA;AAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"widget.js","names":[],"sources":["../../../src/types/widget.ts"],"sourcesContent":["import type {\n BaseToken,\n ChainType,\n ContractCall,\n ExecutionOptions,\n ExtendedChain,\n Order,\n Route,\n RouteOptions,\n SDKConfig,\n StaticToken,\n Token,\n} from '@lifi/sdk'\nimport type { WalletMenuOpenArgs } from '@lifi/wallet-management'\nimport type { WidgetProviderProps } from '@lifi/widget-provider'\nimport type {\n Components,\n PaletteMode,\n PaletteOptions,\n Shape,\n SxProps,\n Theme,\n} from '@mui/material'\nimport type { TypographyVariantsOptions } from '@mui/material/styles'\nimport type {\n CSSProperties,\n PropsWithChildren,\n ReactNode,\n RefObject,\n} from 'react'\nimport type {\n LanguageKey,\n LanguageResources,\n} from '../providers/I18nProvider/types.js'\nimport type { DefaultFieldValues } from '../stores/form/types.js'\n\nexport type WidgetVariant = 'compact' | 'wide' | 'drawer'\nexport type WidgetMode = 'default' | 'split' | 'custom' | 'refuel'\nexport type SplitMode = 'bridge' | 'swap'\nexport type SplitModeOptions = {\n defaultTab: SplitMode\n}\nexport type CustomMode = 'checkout' | 'deposit'\nexport interface ModeOptions {\n /**\n * Configure split mode behavior:\n * - 'bridge' | 'swap': Single mode without tabs\n * - { defaultTab: 'bridge' | 'swap' }: Tabs mode with configurable default tab\n */\n split?: SplitMode | SplitModeOptions\n custom?: { type: CustomMode }\n}\n\nexport type Appearance = PaletteMode | 'system'\nexport interface NavigationProps {\n /**\n * If given, uses a negative margin to counteract the padding on sides for navigation elements like icon buttons.\n * @default true\n */\n edge?: boolean\n}\nexport type WidgetThemeComponents = Partial<\n Pick<\n Components<Theme>,\n | 'MuiAppBar'\n | 'MuiAvatar'\n | 'MuiButton'\n | 'MuiCard'\n | 'MuiDrawer'\n | 'MuiIconButton'\n | 'MuiInputCard'\n | 'MuiNavigationTabs'\n | 'MuiNavigationTab'\n | 'MuiTabs'\n | 'MuiCheckbox'\n >\n>\n\nexport type WidgetTheme = {\n colorSchemes?: {\n light?: {\n palette: PaletteOptions\n }\n dark?: {\n palette: PaletteOptions\n }\n }\n shape?: Partial<Shape>\n typography?: TypographyVariantsOptions\n components?: WidgetThemeComponents\n container?: CSSProperties\n routesContainer?: CSSProperties\n chainSidebarContainer?: CSSProperties\n header?: CSSProperties\n navigation?: NavigationProps\n}\n\nexport interface DisabledUIConfig {\n fromAmount?: boolean\n fromToken?: boolean\n toAddress?: boolean\n toToken?: boolean\n}\n\nexport interface HiddenUIConfig {\n addressBookConnectedWallets?: boolean\n allNetworks?: boolean\n appearance?: boolean\n bridgesSettings?: boolean\n chainSelect?: boolean\n /**\n * Hide the chain sidebar in the `wide` variant. No effect in other variants.\n * @default false\n */\n chainSidebar?: boolean\n contactSupport?: boolean\n /**\n * Hide the drawer close button. Only meaningful when `variant === 'drawer'`.\n * @default false\n */\n drawerCloseButton?: boolean\n fromToken?: boolean\n gasRefuelMessage?: boolean\n hideSmallBalances?: boolean\n history?: boolean\n insufficientGasMessage?: boolean\n integratorStepDetails?: boolean\n language?: boolean\n /**\n * Hide the warning shown when sending to an address with low historical\n * on-chain activity (low transaction count or contract-like behavior).\n * @default false\n */\n lowAddressActivityConfirmation?: boolean\n poweredBy?: boolean\n reverseTokensButton?: boolean\n routeCardPriceImpact?: boolean\n routeTokenDescription?: boolean\n searchTokenInput?: boolean\n toAddress?: boolean\n toToken?: boolean\n walletMenu?: boolean\n}\n\nexport interface RequiredUIConfig {\n accountDeployedMessage?: boolean\n toAddress?: boolean\n}\n\nexport type DefaultUI = {\n transactionDetailsExpanded?: boolean\n navigationHeaderTitleNoWrap?: boolean\n}\n\nexport interface WidgetWalletConfig {\n walletEcosystemsOrder?: Record<string, ChainType[]>\n onConnect?(args?: WalletMenuOpenArgs): void\n /**\n * Determines whether the widget should provide partial wallet management functionality.\n *\n * In partial mode, external wallet management will be used for \"opt-out\" providers,\n * while the internal management is applied for any remaining providers that do not opt out.\n * This allows a flexible balance between the integrator's custom wallet menu and the widget's native wallet menu.\n * @default false\n */\n usePartialWalletManagement?: boolean\n /**\n * This option forces the widget to always use internal wallet management ignoring external wallet management contexts\n * @default false\n */\n forceInternalWalletManagement?: boolean\n}\n\nexport interface WidgetSDKConfig\n extends Omit<\n SDKConfig,\n | 'apiKey'\n | 'disableVersionCheck'\n | 'integrator'\n | 'providers'\n | 'routeOptions'\n | 'widgetVersion'\n > {\n routeOptions?: Omit<\n RouteOptions,\n 'bridges' | 'exchanges' | 'fee' | 'referrer' | 'order' | 'slippage'\n >\n executionOptions?: Pick<ExecutionOptions, 'updateTransactionRequestHook'>\n}\n\nexport interface WidgetContractTool {\n name: string\n logoURI: string\n}\n\nexport interface CalculateFeeParams {\n fromChain: ExtendedChain\n toChain: ExtendedChain\n fromToken: Token\n toToken: Token\n fromAddress?: string\n toAddress?: string\n fromAmount?: bigint\n toAmount?: bigint\n slippage?: number\n}\n\nexport interface WidgetFeeConfig {\n name?: string\n logoURI?: string\n fee?: number\n /**\n * Whether to show the fee percentage in the fee details.\n * @default false\n */\n showFeePercentage?: boolean\n /**\n * Whether to show a tooltip with the fee details. Requires `name` or `feeTooltipComponent` to be set.\n * @default false\n */\n showFeeTooltip?: boolean\n /**\n * Custom tooltip component to show with the fee details.\n */\n feeTooltipComponent?: ReactNode\n /**\n * Function to calculate fees before fetching quotes.\n * If provided, this function will be used instead of the `fee` parameter.\n * Only one of `fee` or `calculateFee` should be used.\n *\n * @param params Object containing the fee calculation parameters\n * @returns A promise that resolves to the calculated fee as a number (e.g., 0.03 represents a 3% fee)\n */\n calculateFee?(params: CalculateFeeParams): Promise<number | undefined>\n}\n\nexport interface ToAddress {\n name?: string\n address: string\n chainType: ChainType\n logoURI?: string\n}\n\nexport interface AllowDeny<T> {\n allow?: T[]\n deny?: T[]\n}\n\nexport type AllowDenySetItem = string | number\nexport interface AllowDenySet {\n allow?: Set<AllowDenySetItem>\n deny?: Set<AllowDenySetItem>\n}\n\nexport type AllowDenySets = {\n from?: AllowDenySet\n to?: AllowDenySet\n} & AllowDenySet\n\nexport type AllowDenyItems<T> = {\n from?: AllowDeny<T>\n to?: AllowDeny<T>\n} & AllowDeny<T>\n\nexport type WidgetChains = {\n types?: AllowDeny<ChainType>\n} & AllowDenyItems<number>\n\nexport type WidgetTokens = {\n featured?: StaticToken[]\n include?: Token[]\n popular?: StaticToken[]\n} & AllowDenyItems<BaseToken>\n\nexport type WidgetLanguages = {\n default?: LanguageKey\n} & AllowDeny<LanguageKey>\n\nexport type PoweredByType = 'default' | 'jumper'\n\nexport interface RouteLabel {\n text: string\n sx?: SxProps<Theme>\n}\n\nexport interface RouteLabelRule {\n label: RouteLabel\n // Matching criteria\n bridges?: AllowDeny<string>\n exchanges?: AllowDeny<string>\n fromChainId?: number[]\n toChainId?: number[]\n fromTokenAddress?: string[]\n toTokenAddress?: string[]\n /**\n * Custom match function evaluated against the route. When provided, its\n * result is AND'd with the other matching criteria — all specified\n * conditions must pass for the label to apply. Use this for matching logic\n * that the built-in fields cannot express (gas costs, step count, route\n * tags, etc.).\n */\n match?: (route: Route) => boolean\n}\n\nexport type ExplorerUrl =\n | string\n | {\n url: string\n txPath?: string\n addressPath?: string\n }\n\nexport type WidgetProvider = (\n props: PropsWithChildren<WidgetProviderProps>\n) => ReactNode\n\nexport interface WidgetConfig {\n fromChain?: number\n toChain?: number\n fromToken?: string\n toToken?: string\n toAddress?: ToAddress\n toAddresses?: ToAddress[]\n fromAmount?: number | string\n minFromAmountUSD?: number\n toAmount?: number | string\n formUpdateKey?: string\n\n providers?: WidgetProvider[]\n\n contractCalls?: ContractCall[]\n contractComponent?: ReactNode\n contractSecondaryComponent?: ReactNode\n contractCompactComponent?: ReactNode\n contractTool?: WidgetContractTool\n integrator: string\n apiKey?: string\n feeConfig?: WidgetFeeConfig\n referrer?: string\n\n routePriority?: Order\n slippage?: number\n\n variant?: WidgetVariant\n mode?: WidgetMode\n modeOptions?: ModeOptions\n\n appearance?: Appearance\n theme?: WidgetTheme\n\n disabledUI?: DisabledUIConfig\n hiddenUI?: HiddenUIConfig\n requiredUI?: RequiredUIConfig\n defaultUI?: DefaultUI\n /**\n * When true, shows only the recommended route and hides the route\n * selector UI. Distinct from `routePriority`, which sets the SDK\n * ranking order across multiple displayed routes.\n * @default false\n */\n showSingleRoute?: boolean\n useRelayerRoutes?: boolean\n\n walletConfig?: WidgetWalletConfig\n sdkConfig?: WidgetSDKConfig\n\n buildUrl?: boolean\n keyPrefix?: string\n\n bridges?: AllowDeny<string>\n exchanges?: AllowDeny<string>\n chains?: WidgetChains\n tokens?: WidgetTokens\n languages?: WidgetLanguages\n languageResources?: LanguageResources\n explorerUrls?: Record<number, ExplorerUrl[]> &\n Partial<Record<'internal', ExplorerUrl[]>>\n poweredBy?: PoweredByType\n\n /**\n * Custom labels/badges to show on routes based on specified rules\n */\n routeLabels?: RouteLabelRule[]\n}\n\nexport interface FormFieldOptions {\n setUrlSearchParam: boolean\n}\n\nexport interface FieldValues\n extends Omit<DefaultFieldValues, 'fromAmount' | 'toAmount' | 'toAddress'> {\n fromAmount?: number | string\n toAmount?: number | string\n toAddress?: ToAddress | string\n}\n\nexport type FieldNames = keyof FieldValues\n\nexport type SetFieldValueFunction = <K extends FieldNames>(\n key: K,\n value: FieldValues[K],\n options?: FormFieldOptions\n) => void\n\nexport type FormState = {\n setFieldValue: SetFieldValueFunction\n}\n\nexport type FormRef = RefObject<FormState | null>\n\nexport interface FormRefProps {\n formRef?: FormRef\n}\n\nexport interface WidgetConfigProps extends FormRefProps {\n config: WidgetConfig\n}\n\nexport interface WidgetConfigPartialProps {\n config?: Partial<WidgetConfig>\n}\n\nexport type WidgetProps = WidgetDrawerProps &\n WidgetConfig &\n WidgetConfigPartialProps &\n FormRefProps\n\nexport interface WidgetDrawerProps extends WidgetConfigPartialProps {\n elementRef?: RefObject<HTMLDivElement>\n open?: boolean\n /**\n * Make sure to make the onClose callback stable (e.g. using useCallback) to avoid causing re-renders of the entire widget\n */\n onClose?(): void\n}\n\nexport enum ExpansionType {\n Routes = 'routes',\n FromChain = 'fromChain',\n ToChain = 'toChain',\n}\n"],"mappings":";AAobA,IAAY,gBAAL,yBAAA,eAAA;CACL,cAAA,YAAA;CACA,cAAA,eAAA;CACA,cAAA,aAAA;;AACF,EAAA,CAAA,CAAA"}
|
|
1
|
+
{"version":3,"file":"widget.js","names":[],"sources":["../../../src/types/widget.ts"],"sourcesContent":["import type {\n BaseToken,\n ChainType,\n ContractCall,\n ExecutionOptions,\n ExtendedChain,\n Order,\n Route,\n RouteOptions,\n SDKConfig,\n StaticToken,\n Token,\n} from '@lifi/sdk'\nimport type { WalletMenuOpenArgs } from '@lifi/wallet-management'\nimport type { WidgetProviderProps } from '@lifi/widget-provider'\nimport type {\n Components,\n PaletteMode,\n PaletteOptions,\n Shape,\n SxProps,\n Theme,\n} from '@mui/material'\nimport type { TypographyVariantsOptions } from '@mui/material/styles'\nimport type {\n CSSProperties,\n PropsWithChildren,\n ReactNode,\n RefObject,\n} from 'react'\nimport type {\n LanguageKey,\n LanguageResources,\n} from '../providers/I18nProvider/types.js'\nimport type { DefaultFieldValues } from '../stores/form/types.js'\n\nexport type WidgetVariant = 'compact' | 'wide' | 'drawer'\n\n/** @internal Not part of the public API. */\nexport type InternalWidgetMode = 'limit'\nexport type WidgetMode =\n | 'default'\n | 'split'\n | 'custom'\n | 'refuel'\n | InternalWidgetMode\nexport type SplitMode = 'bridge' | 'swap'\nexport type SplitModeOptions = {\n defaultTab: SplitMode\n}\nexport type CustomMode = 'checkout' | 'deposit'\nexport interface ModeOptions {\n /**\n * Configure split mode behavior:\n * - 'bridge' | 'swap': Single mode without tabs\n * - { defaultTab: 'bridge' | 'swap' }: Tabs mode with configurable default tab\n */\n split?: SplitMode | SplitModeOptions\n custom?: { type: CustomMode }\n}\n\n/**\n * Identity of a header navigation tab. Each key maps to a widget variant, mode and\n * (optionally) mode options; labels are resolved from the key.\n */\nexport type SplitNavigationTabKey = SplitMode\n/** @internal Not part of the public API. */\nexport type InternalNavigationTabKey =\n | 'default'\n | 'private'\n | 'refuel'\n | 'swap-advanced'\n | 'bridge-advanced'\n | 'limit'\nexport type NavigationTabKey = InternalNavigationTabKey | SplitNavigationTabKey\n\nexport type Appearance = PaletteMode | 'system'\nexport interface NavigationProps {\n /**\n * If given, uses a negative margin to counteract the padding on sides for navigation elements like icon buttons.\n * @default true\n */\n edge?: boolean\n}\nexport type WidgetThemeComponents = Partial<\n Pick<\n Components<Theme>,\n | 'MuiAppBar'\n | 'MuiAvatar'\n | 'MuiButton'\n | 'MuiCard'\n | 'MuiDrawer'\n | 'MuiIconButton'\n | 'MuiInputCard'\n | 'MuiNavigationTabs'\n | 'MuiNavigationTab'\n | 'MuiTabs'\n | 'MuiCheckbox'\n >\n>\n\nexport type WidgetTheme = {\n colorSchemes?: {\n light?: {\n palette: PaletteOptions\n }\n dark?: {\n palette: PaletteOptions\n }\n }\n shape?: Partial<Shape>\n typography?: TypographyVariantsOptions\n components?: WidgetThemeComponents\n container?: CSSProperties\n routesContainer?: CSSProperties\n chainSidebarContainer?: CSSProperties\n header?: CSSProperties\n navigation?: NavigationProps\n}\n\nexport interface DisabledUIConfig {\n fromAmount?: boolean\n fromToken?: boolean\n toAddress?: boolean\n toToken?: boolean\n}\n\nexport interface HiddenUIConfig {\n addressBookConnectedWallets?: boolean\n allNetworks?: boolean\n appearance?: boolean\n bridgesSettings?: boolean\n chainSelect?: boolean\n /**\n * Hide the chain sidebar in the `wide` variant. No effect in other variants.\n * @default false\n */\n chainSidebar?: boolean\n contactSupport?: boolean\n /**\n * Hide the drawer close button. Only meaningful when `variant === 'drawer'`.\n * @default false\n */\n drawerCloseButton?: boolean\n fromToken?: boolean\n gasRefuelMessage?: boolean\n hideSmallBalances?: boolean\n history?: boolean\n insufficientGasMessage?: boolean\n integratorStepDetails?: boolean\n language?: boolean\n /**\n * Hide the warning shown when sending to an address with low historical\n * on-chain activity (low transaction count or contract-like behavior).\n * @default false\n */\n lowAddressActivityConfirmation?: boolean\n poweredBy?: boolean\n reverseTokensButton?: boolean\n routeCardPriceImpact?: boolean\n routeTokenDescription?: boolean\n searchTokenInput?: boolean\n toAddress?: boolean\n toToken?: boolean\n walletMenu?: boolean\n}\n\nexport interface RequiredUIConfig {\n accountDeployedMessage?: boolean\n toAddress?: boolean\n}\n\nexport type DefaultUI = {\n transactionDetailsExpanded?: boolean\n navigationHeaderTitleNoWrap?: boolean\n}\n\nexport interface WidgetWalletConfig {\n walletEcosystemsOrder?: Record<string, ChainType[]>\n onConnect?(args?: WalletMenuOpenArgs): void\n /**\n * Determines whether the widget should provide partial wallet management functionality.\n *\n * In partial mode, external wallet management will be used for \"opt-out\" providers,\n * while the internal management is applied for any remaining providers that do not opt out.\n * This allows a flexible balance between the integrator's custom wallet menu and the widget's native wallet menu.\n * @default false\n */\n usePartialWalletManagement?: boolean\n /**\n * This option forces the widget to always use internal wallet management ignoring external wallet management contexts\n * @default false\n */\n forceInternalWalletManagement?: boolean\n}\n\nexport interface WidgetSDKConfig\n extends Omit<\n SDKConfig,\n | 'apiKey'\n | 'disableVersionCheck'\n | 'integrator'\n | 'providers'\n | 'routeOptions'\n | 'widgetVersion'\n > {\n routeOptions?: Omit<\n RouteOptions,\n 'bridges' | 'exchanges' | 'fee' | 'referrer' | 'order' | 'slippage'\n >\n executionOptions?: Pick<ExecutionOptions, 'updateTransactionRequestHook'>\n}\n\nexport interface WidgetContractTool {\n name: string\n logoURI: string\n}\n\nexport interface CalculateFeeParams {\n fromChain: ExtendedChain\n toChain: ExtendedChain\n fromToken: Token\n toToken: Token\n fromAddress?: string\n toAddress?: string\n fromAmount?: bigint\n toAmount?: bigint\n slippage?: number\n}\n\nexport interface WidgetFeeConfig {\n name?: string\n logoURI?: string\n fee?: number\n /**\n * Whether to show the fee percentage in the fee details.\n * @default false\n */\n showFeePercentage?: boolean\n /**\n * Whether to show a tooltip with the fee details. Requires `name` or `feeTooltipComponent` to be set.\n * @default false\n */\n showFeeTooltip?: boolean\n /**\n * Custom tooltip component to show with the fee details.\n */\n feeTooltipComponent?: ReactNode\n /**\n * Function to calculate fees before fetching quotes.\n * If provided, this function will be used instead of the `fee` parameter.\n * Only one of `fee` or `calculateFee` should be used.\n *\n * @param params Object containing the fee calculation parameters\n * @returns A promise that resolves to the calculated fee as a number (e.g., 0.03 represents a 3% fee)\n */\n calculateFee?(params: CalculateFeeParams): Promise<number | undefined>\n}\n\nexport interface ToAddress {\n name?: string\n address: string\n chainType: ChainType\n logoURI?: string\n}\n\nexport interface AllowDeny<T> {\n allow?: T[]\n deny?: T[]\n}\n\nexport type AllowDenySetItem = string | number\nexport interface AllowDenySet {\n allow?: Set<AllowDenySetItem>\n deny?: Set<AllowDenySetItem>\n}\n\nexport type AllowDenySets = {\n from?: AllowDenySet\n to?: AllowDenySet\n} & AllowDenySet\n\nexport type AllowDenyItems<T> = {\n from?: AllowDeny<T>\n to?: AllowDeny<T>\n} & AllowDeny<T>\n\nexport type WidgetChains = {\n types?: AllowDeny<ChainType>\n} & AllowDenyItems<number>\n\nexport type WidgetTokens = {\n featured?: StaticToken[]\n include?: Token[]\n popular?: StaticToken[]\n} & AllowDenyItems<BaseToken>\n\nexport type WidgetLanguages = {\n default?: LanguageKey\n} & AllowDeny<LanguageKey>\n\nexport type PoweredByType = 'default' | 'jumper'\n\nexport interface RouteLabel {\n text: string\n sx?: SxProps<Theme>\n}\n\nexport interface RouteLabelRule {\n label: RouteLabel\n // Matching criteria\n bridges?: AllowDeny<string>\n exchanges?: AllowDeny<string>\n fromChainId?: number[]\n toChainId?: number[]\n fromTokenAddress?: string[]\n toTokenAddress?: string[]\n /**\n * Custom match function evaluated against the route. When provided, its\n * result is AND'd with the other matching criteria — all specified\n * conditions must pass for the label to apply. Use this for matching logic\n * that the built-in fields cannot express (gas costs, step count, route\n * tags, etc.).\n */\n match?: (route: Route) => boolean\n}\n\nexport type ExplorerUrl =\n | string\n | {\n url: string\n txPath?: string\n addressPath?: string\n }\n\nexport type WidgetProvider = (\n props: PropsWithChildren<WidgetProviderProps>\n) => ReactNode\n\nexport interface WidgetConfig {\n fromChain?: number\n toChain?: number\n fromToken?: string\n toToken?: string\n toAddress?: ToAddress\n toAddresses?: ToAddress[]\n fromAmount?: number | string\n minFromAmountUSD?: number\n toAmount?: number | string\n formUpdateKey?: string\n\n providers?: WidgetProvider[]\n\n contractCalls?: ContractCall[]\n contractComponent?: ReactNode\n contractSecondaryComponent?: ReactNode\n contractCompactComponent?: ReactNode\n contractTool?: WidgetContractTool\n integrator: string\n apiKey?: string\n feeConfig?: WidgetFeeConfig\n referrer?: string\n\n routePriority?: Order\n slippage?: number\n\n variant?: WidgetVariant\n mode?: WidgetMode\n modeOptions?: ModeOptions\n /**\n * Header navigation tabs, in order. When set, the widget renders a tab bar\n * and the active tab drives the displayed flow. Each entry is a tab key.\n *\n * @internal Not part of the public API.\n */\n _navigationTabs?: NavigationTabKey[]\n\n appearance?: Appearance\n theme?: WidgetTheme\n\n disabledUI?: DisabledUIConfig\n hiddenUI?: HiddenUIConfig\n requiredUI?: RequiredUIConfig\n defaultUI?: DefaultUI\n /**\n * When true, shows only the recommended route and hides the route\n * selector UI. Distinct from `routePriority`, which sets the SDK\n * ranking order across multiple displayed routes.\n * @default false\n */\n showSingleRoute?: boolean\n useRelayerRoutes?: boolean\n\n walletConfig?: WidgetWalletConfig\n sdkConfig?: WidgetSDKConfig\n\n buildUrl?: boolean\n keyPrefix?: string\n\n bridges?: AllowDeny<string>\n exchanges?: AllowDeny<string>\n chains?: WidgetChains\n tokens?: WidgetTokens\n languages?: WidgetLanguages\n languageResources?: LanguageResources\n explorerUrls?: Record<number, ExplorerUrl[]> &\n Partial<Record<'internal', ExplorerUrl[]>>\n poweredBy?: PoweredByType\n\n /**\n * Custom labels/badges to show on routes based on specified rules\n */\n routeLabels?: RouteLabelRule[]\n}\n\nexport interface FormFieldOptions {\n setUrlSearchParam: boolean\n}\n\nexport interface FieldValues\n extends Omit<DefaultFieldValues, 'fromAmount' | 'toAmount' | 'toAddress'> {\n fromAmount?: number | string\n toAmount?: number | string\n toAddress?: ToAddress | string\n}\n\nexport type FieldNames = keyof FieldValues\n\nexport type SetFieldValueFunction = <K extends FieldNames>(\n key: K,\n value: FieldValues[K],\n options?: FormFieldOptions\n) => void\n\nexport type FormState = {\n setFieldValue: SetFieldValueFunction\n}\n\nexport type FormRef = RefObject<FormState | null>\n\nexport interface FormRefProps {\n formRef?: FormRef\n}\n\nexport interface WidgetConfigProps extends FormRefProps {\n config: WidgetConfig\n}\n\nexport interface WidgetConfigPartialProps {\n config?: Partial<WidgetConfig>\n}\n\nexport type WidgetProps = WidgetDrawerProps &\n WidgetConfig &\n WidgetConfigPartialProps &\n FormRefProps\n\nexport interface WidgetDrawerProps extends WidgetConfigPartialProps {\n elementRef?: RefObject<HTMLDivElement>\n open?: boolean\n /**\n * Make sure to make the onClose callback stable (e.g. using useCallback) to avoid causing re-renders of the entire widget\n */\n onClose?(): void\n}\n\nexport enum ExpansionType {\n Routes = 'routes',\n FromChain = 'fromChain',\n ToChain = 'toChain',\n}\n"],"mappings":";AAkdA,IAAY,gBAAL,yBAAA,eAAA;CACL,cAAA,YAAA;CACA,cAAA,eAAA;CACA,cAAA,aAAA;;AACF,EAAA,CAAA,CAAA"}
|