@lifi/widget 0.0.0-preview-6cc63bac → 0.0.0-preview-fe8dc5e6

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.
Files changed (312) hide show
  1. package/dist/esm/App.d.ts +4 -2
  2. package/dist/esm/App.d.ts.map +1 -1
  3. package/dist/esm/App.js +4 -4
  4. package/dist/esm/App.js.map +1 -1
  5. package/dist/esm/AppDrawer.d.ts +1 -1
  6. package/dist/esm/AppDrawer.d.ts.map +1 -1
  7. package/dist/esm/AppDrawer.js +5 -6
  8. package/dist/esm/AppDrawer.js.map +1 -1
  9. package/dist/esm/AppDrawerContext.js +2 -2
  10. package/dist/esm/AppDrawerContext.js.map +1 -1
  11. package/dist/esm/components/ActionRow/ActionRow.style.js.map +1 -1
  12. package/dist/esm/components/AmountInput/AmountInput.js.map +1 -1
  13. package/dist/esm/components/AmountInput/AmountInput.style.js.map +1 -1
  14. package/dist/esm/components/AmountInput/AmountInputEndAdornment.style.js.map +1 -1
  15. package/dist/esm/components/AmountInput/PriceFormHelperText.style.js.map +1 -1
  16. package/dist/esm/components/AppContainer.js.map +1 -1
  17. package/dist/esm/components/Avatar/AccountAvatar.js.map +1 -1
  18. package/dist/esm/components/Avatar/Avatar.style.js.map +1 -1
  19. package/dist/esm/components/Avatar/SmallAvatar.js.map +1 -1
  20. package/dist/esm/components/BottomSheet/BottomSheet.js +3 -3
  21. package/dist/esm/components/BottomSheet/BottomSheet.js.map +1 -1
  22. package/dist/esm/components/ButtonTertiary.js.map +1 -1
  23. package/dist/esm/components/Card/Card.js.map +1 -1
  24. package/dist/esm/components/Card/CardButton.style.js.map +1 -1
  25. package/dist/esm/components/Card/CardHeader.js.map +1 -1
  26. package/dist/esm/components/Card/CardIconButton.js.map +1 -1
  27. package/dist/esm/components/Card/CardLabel.js.map +1 -1
  28. package/dist/esm/components/Card/CardTitle.js.map +1 -1
  29. package/dist/esm/components/Card/InputCard.js.map +1 -1
  30. package/dist/esm/components/ChainSelect/ChainSelect.js.map +1 -1
  31. package/dist/esm/components/ChainSelect/ChainSelect.style.js.map +1 -1
  32. package/dist/esm/components/ChainSelect/useChainSelect.js.map +1 -1
  33. package/dist/esm/components/Chains/AllChainsAvatar.js.map +1 -1
  34. package/dist/esm/components/Chains/ChainList.js.map +1 -1
  35. package/dist/esm/components/Chains/ChainList.style.js.map +1 -1
  36. package/dist/esm/components/Chains/ChainsExpanded.style.js.map +1 -1
  37. package/dist/esm/components/Chains/VirtualizedChainList.js.map +1 -1
  38. package/dist/esm/components/ContextMenu.style.js.map +1 -1
  39. package/dist/esm/components/ContractComponent/NFT/NFT.style.js.map +1 -1
  40. package/dist/esm/components/Dialog/Dialog.style.js.map +1 -1
  41. package/dist/esm/components/EmptyListIndicator/EmptyListIndicator.style.js.map +1 -1
  42. package/dist/esm/components/ExecutionStatusCard/StatusIcon.js.map +1 -1
  43. package/dist/esm/components/ExecutionStatusCard/StatusIcon.style.js.map +1 -1
  44. package/dist/esm/components/ExecutionStatusCard/iconKey.js.map +1 -1
  45. package/dist/esm/components/Expansion/Expansion.style.js.map +1 -1
  46. package/dist/esm/components/Header/ActivitiesButton.style.js.map +1 -1
  47. package/dist/esm/components/Header/Header.js +7 -10
  48. package/dist/esm/components/Header/Header.js.map +1 -1
  49. package/dist/esm/components/Header/Header.style.js.map +1 -1
  50. package/dist/esm/components/Header/HeaderNavigationTabs.js +26 -0
  51. package/dist/esm/components/Header/HeaderNavigationTabs.js.map +1 -0
  52. package/dist/esm/components/Header/HeaderTabs.js +33 -0
  53. package/dist/esm/components/Header/HeaderTabs.js.map +1 -0
  54. package/dist/esm/components/Header/NavigationHeader.js +7 -5
  55. package/dist/esm/components/Header/NavigationHeader.js.map +1 -1
  56. package/dist/esm/components/Header/SettingsButton.style.js.map +1 -1
  57. package/dist/esm/components/Header/WalletMenu.style.js.map +1 -1
  58. package/dist/esm/components/IconCircle/IconCircle.style.js.map +1 -1
  59. package/dist/esm/components/IconTypography.js.map +1 -1
  60. package/dist/esm/components/Input.js.map +1 -1
  61. package/dist/esm/components/ListItem/ListItem.js.map +1 -1
  62. package/dist/esm/components/ListItem/ListItemButton.js.map +1 -1
  63. package/dist/esm/components/ListItemButton.js.map +1 -1
  64. package/dist/esm/components/ListItemText.js.map +1 -1
  65. package/dist/esm/components/Menu.js.map +1 -1
  66. package/dist/esm/components/Messages/AlertMessage.style.js.map +1 -1
  67. package/dist/esm/components/Messages/GasRefuelMessage.style.js.map +1 -1
  68. package/dist/esm/components/Messages/WarningMessages.js.map +1 -1
  69. package/dist/esm/components/PageContainer.js.map +1 -1
  70. package/dist/esm/components/PoweredBy/PoweredBy.js.map +1 -1
  71. package/dist/esm/components/PoweredBy/PoweredBy.style.js.map +1 -1
  72. package/dist/esm/components/ReverseTokensButton/ReverseTokensButton.style.js.map +1 -1
  73. package/dist/esm/components/RouteCard/RouteDetails.js.map +1 -1
  74. package/dist/esm/components/RouteCard/RouteDetails.style.js +2 -2
  75. package/dist/esm/components/RouteCard/RouteDetails.style.js.map +1 -1
  76. package/dist/esm/components/RouteCard/RouteToken.style.js.map +1 -1
  77. package/dist/esm/components/RouteCard/RouteTokens.js.map +1 -1
  78. package/dist/esm/components/RouteCard/getMatchingLabels.js.map +1 -1
  79. package/dist/esm/components/Routes/RoutesContent.js.map +1 -1
  80. package/dist/esm/components/Routes/RoutesExpanded.style.js.map +1 -1
  81. package/dist/esm/components/Search/SearchInput.style.js.map +1 -1
  82. package/dist/esm/components/Search/SearchNotFound.style.js.map +1 -1
  83. package/dist/esm/components/SelectTokenButton/SelectTokenButton.style.js.map +1 -1
  84. package/dist/esm/components/SendToWallet/SendToWalletButton.style.js.map +1 -1
  85. package/dist/esm/components/SettingsListItemButton.js.map +1 -1
  86. package/dist/esm/components/Skeleton/WidgetSkeleton.style.js.map +1 -1
  87. package/dist/esm/components/Step/StepActions.js.map +1 -1
  88. package/dist/esm/components/Step/StepActions.style.js.map +1 -1
  89. package/dist/esm/components/StepActions/SentToWalletRow.style.js.map +1 -1
  90. package/dist/esm/components/StepActions/StepActionRow.style.js.map +1 -1
  91. package/dist/esm/components/Switch.js.map +1 -1
  92. package/dist/esm/components/Tabs/NavigationTabs.js +3 -0
  93. package/dist/esm/components/Tabs/NavigationTabs.js.map +1 -1
  94. package/dist/esm/components/Tabs/Tabs.style.js.map +1 -1
  95. package/dist/esm/components/Timer/StepStatusTimer.style.js.map +1 -1
  96. package/dist/esm/components/Token/Token.style.js.map +1 -1
  97. package/dist/esm/components/TokenList/PinTokenButton.js.map +1 -1
  98. package/dist/esm/components/TokenList/TokenDetailsSheet.js +4 -4
  99. package/dist/esm/components/TokenList/TokenDetailsSheet.js.map +1 -1
  100. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js +4 -4
  101. package/dist/esm/components/TokenList/TokenDetailsSheetContent.js.map +1 -1
  102. package/dist/esm/components/TokenList/TokenDetailsSheetContent.style.js.map +1 -1
  103. package/dist/esm/components/TokenList/TokenList.style.js.map +1 -1
  104. package/dist/esm/components/TokenList/TokenListItem.js +2 -2
  105. package/dist/esm/components/TokenList/TokenListItem.js.map +1 -1
  106. package/dist/esm/components/TokenList/VirtualizedTokenList.js.map +1 -1
  107. package/dist/esm/components/TokenList/useTokenSelect.js +3 -3
  108. package/dist/esm/components/TokenList/useTokenSelect.js.map +1 -1
  109. package/dist/esm/components/TokenRate/TokenRate.style.js.map +1 -1
  110. package/dist/esm/components/TransactionCard/ActiveTransactionCard.js.map +1 -1
  111. package/dist/esm/components/TransactionCard/ActiveTransactionCard.style.js.map +1 -1
  112. package/dist/esm/components/TransactionCard/TransactionCard.style.js.map +1 -1
  113. package/dist/esm/config/version.d.ts +1 -1
  114. package/dist/esm/config/version.js +1 -1
  115. package/dist/esm/config/version.js.map +1 -1
  116. package/dist/esm/hooks/timer/validate.js.map +1 -1
  117. package/dist/esm/hooks/useAccountsBalancesData.js.map +1 -1
  118. package/dist/esm/hooks/useAvailableChains.js +1 -1
  119. package/dist/esm/hooks/useChainSearch.js.map +1 -1
  120. package/dist/esm/hooks/useChains.js +1 -1
  121. package/dist/esm/hooks/useExplorer.js.map +1 -1
  122. package/dist/esm/hooks/useFilteredByTokenBalances.js +1 -1
  123. package/dist/esm/hooks/useFilteredByTokenBalances.js.map +1 -1
  124. package/dist/esm/hooks/useFromTokenSufficiency.js.map +1 -1
  125. package/dist/esm/hooks/useGasSufficiency.js.map +1 -1
  126. package/dist/esm/hooks/useLanguages.js +2 -2
  127. package/dist/esm/hooks/useLanguages.js.map +1 -1
  128. package/dist/esm/hooks/useRouteExecution.js.map +1 -1
  129. package/dist/esm/hooks/useRouteExecutionMessage.js.map +1 -1
  130. package/dist/esm/hooks/useRouteRequiredAccountConnection.js.map +1 -1
  131. package/dist/esm/hooks/useRoutes.js.map +1 -1
  132. package/dist/esm/hooks/useSwapOnly.js +2 -4
  133. package/dist/esm/hooks/useSwapOnly.js.map +1 -1
  134. package/dist/esm/hooks/useToAddressRequirements.js +2 -2
  135. package/dist/esm/hooks/useToAddressRequirements.js.map +1 -1
  136. package/dist/esm/hooks/useToken.js.map +1 -1
  137. package/dist/esm/hooks/useTokenBalance.js.map +1 -1
  138. package/dist/esm/hooks/useTokenBalances.js.map +1 -1
  139. package/dist/esm/hooks/useTokenBalancesQueries.js.map +1 -1
  140. package/dist/esm/hooks/useTokenSearch.js +1 -1
  141. package/dist/esm/hooks/useTokenSearch.js.map +1 -1
  142. package/dist/esm/hooks/useTokens.js +1 -1
  143. package/dist/esm/hooks/useTokens.js.map +1 -1
  144. package/dist/esm/hooks/useTools.js +1 -1
  145. package/dist/esm/hooks/useTransactionDetails.js.map +1 -1
  146. package/dist/esm/hooks/useTransactionHistory.js.map +1 -1
  147. package/dist/esm/hooks/useTransactionList.js.map +1 -1
  148. package/dist/esm/i18n/en.json +3 -0
  149. package/dist/esm/index.d.ts +2 -2
  150. package/dist/esm/pages/ActivitiesPage/ActivitiesPage.js.map +1 -1
  151. package/dist/esm/pages/MainPage/ReviewButton.js +2 -2
  152. package/dist/esm/pages/MainPage/ReviewButton.js.map +1 -1
  153. package/dist/esm/pages/RoutesPage/RoutesPage.js.map +1 -1
  154. package/dist/esm/pages/RoutesPage/RoutesPage.style.js.map +1 -1
  155. package/dist/esm/pages/SelectEnabledToolsPage.js.map +1 -1
  156. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js +3 -3
  157. package/dist/esm/pages/SendToWallet/BookmarkAddressSheet.js.map +1 -1
  158. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js +3 -3
  159. package/dist/esm/pages/SendToWallet/ConfirmAddressSheet.js.map +1 -1
  160. package/dist/esm/pages/SendToWallet/SendToWalletPage.js.map +1 -1
  161. package/dist/esm/pages/SendToWallet/SendToWalletPage.style.js.map +1 -1
  162. package/dist/esm/pages/SettingsPage/BridgeAndExchangeSettings.js.map +1 -1
  163. package/dist/esm/pages/SettingsPage/GasPriceSettings.js +1 -1
  164. package/dist/esm/pages/SettingsPage/ResetSettingsButton.style.js.map +1 -1
  165. package/dist/esm/pages/SettingsPage/RoutePrioritySettings.js +1 -1
  166. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCard.style.js.map +1 -1
  167. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js +3 -3
  168. package/dist/esm/pages/SettingsPage/SettingsCard/SettingCardExpandable.js.map +1 -1
  169. package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js +3 -3
  170. package/dist/esm/pages/SettingsPage/SettingsCard/SettingsAccordian.js.map +1 -1
  171. package/dist/esm/pages/SettingsPage/SlippageSettings/SlippageSettings.style.js.map +1 -1
  172. package/dist/esm/pages/SettingsPage/ThemeSettings.js.map +1 -1
  173. package/dist/esm/pages/TransactionDetailsPage/ContactSupportButton.style.js.map +1 -1
  174. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsPage.js.map +1 -1
  175. package/dist/esm/pages/TransactionDetailsPage/TransactionDetailsSkeleton.js.map +1 -1
  176. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js +3 -3
  177. package/dist/esm/pages/TransactionPage/ConfirmToAddressSheet.js.map +1 -1
  178. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js +16 -15
  179. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.js.map +1 -1
  180. package/dist/esm/pages/TransactionPage/ExchangeRateBottomSheet.style.js.map +1 -1
  181. package/dist/esm/pages/TransactionPage/RouteTracker.js.map +1 -1
  182. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js +3 -3
  183. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.js.map +1 -1
  184. package/dist/esm/pages/TransactionPage/TokenValueBottomSheet.style.js.map +1 -1
  185. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js +27 -31
  186. package/dist/esm/pages/TransactionPage/TransactionExecutionContent.js.map +1 -1
  187. package/dist/esm/pages/TransactionPage/utils.js.map +1 -1
  188. package/dist/esm/providers/I18nProvider/I18nProvider.js.map +1 -1
  189. package/dist/esm/providers/I18nProvider/i18n.js.map +1 -1
  190. package/dist/esm/providers/QueryClientProvider.js +2 -2
  191. package/dist/esm/providers/QueryClientProvider.js.map +1 -1
  192. package/dist/esm/providers/SDKClientProvider.js +26 -27
  193. package/dist/esm/providers/SDKClientProvider.js.map +1 -1
  194. package/dist/esm/providers/WidgetProvider/WidgetProvider.js +25 -27
  195. package/dist/esm/providers/WidgetProvider/WidgetProvider.js.map +1 -1
  196. package/dist/esm/stores/StoreProvider.js +3 -4
  197. package/dist/esm/stores/StoreProvider.js.map +1 -1
  198. package/dist/esm/stores/bookmarks/BookmarkStore.js +3 -3
  199. package/dist/esm/stores/bookmarks/BookmarkStore.js.map +1 -1
  200. package/dist/esm/stores/bookmarks/createBookmarkStore.js.map +1 -1
  201. package/dist/esm/stores/chains/ChainOrderStore.js +4 -4
  202. package/dist/esm/stores/chains/ChainOrderStore.js.map +1 -1
  203. package/dist/esm/stores/chains/createChainOrderStore.js.map +1 -1
  204. package/dist/esm/stores/form/FormStore.js +1 -1
  205. package/dist/esm/stores/form/FormStore.js.map +1 -1
  206. package/dist/esm/stores/form/URLSearchParamsBuilder.js.map +1 -1
  207. package/dist/esm/stores/form/createFormStore.js.map +1 -1
  208. package/dist/esm/stores/form/getDefaultValuesFromQueryString.js.map +1 -1
  209. package/dist/esm/stores/form/useFieldActions.js.map +1 -1
  210. package/dist/esm/stores/form/useFieldValues.js.map +1 -1
  211. package/dist/esm/stores/form/useFormRef.js.map +1 -1
  212. package/dist/esm/stores/form/useFormStore.js +2 -2
  213. package/dist/esm/stores/form/useFormStore.js.map +1 -1
  214. package/dist/esm/stores/header/useHeaderStore.js +3 -3
  215. package/dist/esm/stores/header/useHeaderStore.js.map +1 -1
  216. package/dist/esm/stores/inputMode/useInputModeStore.js.map +1 -1
  217. package/dist/esm/stores/navigationTabs/useNavigationTabLabel.js +22 -0
  218. package/dist/esm/stores/navigationTabs/useNavigationTabLabel.js.map +1 -0
  219. package/dist/esm/stores/navigationTabs/useNavigationTabsStore.js +62 -0
  220. package/dist/esm/stores/navigationTabs/useNavigationTabsStore.js.map +1 -0
  221. package/dist/esm/stores/navigationTabs/utils.js +92 -0
  222. package/dist/esm/stores/navigationTabs/utils.js.map +1 -0
  223. package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js +3 -3
  224. package/dist/esm/stores/pinnedTokens/PinnedTokensStore.js.map +1 -1
  225. package/dist/esm/stores/pinnedTokens/createPinnedTokensStore.js.map +1 -1
  226. package/dist/esm/stores/routes/RouteExecutionStore.js +3 -3
  227. package/dist/esm/stores/routes/RouteExecutionStore.js.map +1 -1
  228. package/dist/esm/stores/routes/createRouteExecutionStore.js.map +1 -1
  229. package/dist/esm/stores/routes/useIntermediateRoutesStore.js.map +1 -1
  230. package/dist/esm/stores/routes/useRouteExecutionIndicator.js.map +1 -1
  231. package/dist/esm/stores/routes/utils.js.map +1 -1
  232. package/dist/esm/stores/settings/SettingsStore.js +3 -3
  233. package/dist/esm/stores/settings/SettingsStore.js.map +1 -1
  234. package/dist/esm/stores/settings/createSettingsStore.js +122 -96
  235. package/dist/esm/stores/settings/createSettingsStore.js.map +1 -1
  236. package/dist/esm/stores/settings/types.d.ts +0 -2
  237. package/dist/esm/stores/settings/types.d.ts.map +1 -1
  238. package/dist/esm/stores/settings/types.js.map +1 -1
  239. package/dist/esm/stores/settings/useSettingsActions.js.map +1 -1
  240. package/dist/esm/themes/createTheme.js.map +1 -1
  241. package/dist/esm/themes/utils.js.map +1 -1
  242. package/dist/esm/types/widget.d.ts +19 -2
  243. package/dist/esm/types/widget.d.ts.map +1 -1
  244. package/dist/esm/types/widget.js.map +1 -1
  245. package/dist/esm/utils/compactNumberFormatter.js.map +1 -1
  246. package/dist/esm/utils/converters.js.map +1 -1
  247. package/dist/esm/utils/deepEqual.js.map +1 -1
  248. package/dist/esm/utils/fees.js.map +1 -1
  249. package/dist/esm/utils/format.js.map +1 -1
  250. package/dist/esm/utils/getActionMessage.js.map +1 -1
  251. package/dist/esm/utils/getErrorMessage.js.map +1 -1
  252. package/dist/esm/utils/item.js.map +1 -1
  253. package/dist/esm/utils/{variant.js → mode.js} +2 -2
  254. package/dist/esm/utils/mode.js.map +1 -0
  255. package/dist/esm/utils/prepareActions.js +1 -1
  256. package/dist/esm/utils/prepareActions.js.map +1 -1
  257. package/dist/esm/utils/timer.js.map +1 -1
  258. package/dist/esm/utils/token.js +1 -1
  259. package/dist/esm/utils/token.js.map +1 -1
  260. package/dist/esm/utils/tokenList.js.map +1 -1
  261. package/package.json +11 -11
  262. package/src/App.tsx +7 -7
  263. package/src/AppDrawer.tsx +77 -78
  264. package/src/AppDrawerContext.ts +2 -2
  265. package/src/components/BottomSheet/BottomSheet.tsx +56 -52
  266. package/src/components/Header/Header.tsx +20 -18
  267. package/src/components/Header/HeaderNavigationTabs.tsx +25 -0
  268. package/src/components/Header/HeaderTabs.tsx +48 -0
  269. package/src/components/Header/NavigationHeader.tsx +11 -8
  270. package/src/components/Tabs/NavigationTabs.tsx +3 -0
  271. package/src/components/TokenList/TokenDetailsSheet.tsx +9 -7
  272. package/src/components/TokenList/TokenDetailsSheetContent.tsx +176 -177
  273. package/src/components/TokenList/useTokenSelect.ts +2 -2
  274. package/src/config/version.ts +1 -1
  275. package/src/hooks/useSwapOnly.ts +2 -5
  276. package/src/hooks/useToAddressRequirements.ts +2 -2
  277. package/src/pages/MainPage/ReviewButton.tsx +2 -2
  278. package/src/pages/SendToWallet/BookmarkAddressSheet.tsx +176 -185
  279. package/src/pages/SendToWallet/ConfirmAddressSheet.tsx +9 -6
  280. package/src/pages/SettingsPage/SettingsCard/SettingCardExpandable.tsx +58 -65
  281. package/src/pages/SettingsPage/SettingsCard/SettingsAccordian.tsx +4 -4
  282. package/src/pages/TransactionPage/ConfirmToAddressSheet.tsx +9 -6
  283. package/src/pages/TransactionPage/ExchangeRateBottomSheet.tsx +53 -58
  284. package/src/pages/TransactionPage/TokenValueBottomSheet.tsx +24 -21
  285. package/src/pages/TransactionPage/TransactionExecutionContent.tsx +8 -6
  286. package/src/providers/QueryClientProvider.tsx +2 -2
  287. package/src/providers/SDKClientProvider.tsx +3 -7
  288. package/src/providers/WidgetProvider/WidgetProvider.tsx +6 -7
  289. package/src/stores/StoreProvider.tsx +3 -10
  290. package/src/stores/bookmarks/BookmarkStore.tsx +4 -4
  291. package/src/stores/chains/ChainOrderStore.tsx +4 -4
  292. package/src/stores/form/FormStore.tsx +2 -2
  293. package/src/stores/form/useFormStore.ts +2 -2
  294. package/src/stores/header/useHeaderStore.tsx +3 -5
  295. package/src/stores/navigationTabs/types.ts +27 -0
  296. package/src/stores/navigationTabs/useNavigationTabLabel.ts +28 -0
  297. package/src/stores/navigationTabs/useNavigationTabsStore.tsx +108 -0
  298. package/src/stores/navigationTabs/utils.ts +134 -0
  299. package/src/stores/pinnedTokens/PinnedTokensStore.tsx +4 -4
  300. package/src/stores/routes/RouteExecutionStore.tsx +4 -4
  301. package/src/stores/settings/SettingsStore.tsx +4 -4
  302. package/src/stores/settings/createSettingsStore.ts +48 -12
  303. package/src/stores/settings/types.ts +1 -16
  304. package/src/types/widget.ts +31 -1
  305. package/dist/esm/components/Header/SplitNavigationTabs.js +0 -33
  306. package/dist/esm/components/Header/SplitNavigationTabs.js.map +0 -1
  307. package/dist/esm/stores/settings/useSplitModeStore.js +0 -36
  308. package/dist/esm/stores/settings/useSplitModeStore.js.map +0 -1
  309. package/dist/esm/utils/variant.js.map +0 -1
  310. package/src/components/Header/SplitNavigationTabs.tsx +0 -32
  311. package/src/stores/settings/useSplitModeStore.tsx +0 -58
  312. /package/src/utils/{variant.ts → mode.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"RouteExecutionStore.js","names":[],"sources":["../../../../src/stores/routes/RouteExecutionStore.tsx"],"sourcesContent":["import { createContext, type JSX, useContext, useRef } from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport type { PersistStoreProviderProps } from '../types.js'\nimport { createRouteExecutionStore } from './createRouteExecutionStore.js'\nimport type { RouteExecutionState } from './types.js'\n\ntype RouteExecutionStore = UseBoundStore<StoreApi<RouteExecutionState>>\n\nconst RouteExecutionStoreContext = createContext<RouteExecutionStore | null>(\n null\n)\n\nexport function RouteExecutionStoreProvider({\n children,\n ...props\n}: PersistStoreProviderProps): JSX.Element {\n const storeRef = useRef<RouteExecutionStore>(null)\n if (!storeRef.current) {\n storeRef.current = createRouteExecutionStore(props)\n }\n return (\n <RouteExecutionStoreContext.Provider value={storeRef.current}>\n {children}\n </RouteExecutionStoreContext.Provider>\n )\n}\n\nexport function useRouteExecutionStoreContext(): any {\n const useStore = useContext(RouteExecutionStoreContext)\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${RouteExecutionStoreProvider.name}>.`\n )\n }\n return useStore\n}\n\nexport function useRouteExecutionStore<T>(\n selector: (state: RouteExecutionState) => T\n): T {\n const useStore = useRouteExecutionStoreContext()\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;AASA,MAAM,6BAA6B,cACjC,IACF;AAEA,SAAgB,4BAA4B,EAC1C,UACA,GAAG,SACsC;CACzC,MAAM,WAAW,OAA4B,IAAI;CACjD,IAAI,CAAC,SAAS,SACZ,SAAS,UAAU,0BAA0B,KAAK;CAEpD,OACE,oBAAC,2BAA2B,UAA5B;EAAqC,OAAO,SAAS;EAClD;CACkC,CAAA;AAEzC;AAEA,SAAgB,gCAAqC;CACnD,MAAM,WAAW,WAAW,0BAA0B;CACtD,IAAI,CAAC,UACH,MAAM,IAAI,MACR,yCAAyC,4BAA4B,KAAK,GAC5E;CAEF,OAAO;AACT;AAEA,SAAgB,uBACd,UACG;CAEH,OADiB,8BACH,EAAE,WAAW,QAAQ,CAAC;AACtC"}
1
+ {"version":3,"file":"RouteExecutionStore.js","names":[],"sources":["../../../../src/stores/routes/RouteExecutionStore.tsx"],"sourcesContent":["import { createContext, type JSX, use, useRef } from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport type { PersistStoreProviderProps } from '../types.js'\nimport { createRouteExecutionStore } from './createRouteExecutionStore.js'\nimport type { RouteExecutionState } from './types.js'\n\ntype RouteExecutionStore = UseBoundStore<StoreApi<RouteExecutionState>>\n\nconst RouteExecutionStoreContext = createContext<RouteExecutionStore | null>(\n null\n)\n\nexport function RouteExecutionStoreProvider({\n children,\n ...props\n}: PersistStoreProviderProps): JSX.Element {\n const storeRef = useRef<RouteExecutionStore>(null)\n if (!storeRef.current) {\n storeRef.current = createRouteExecutionStore(props)\n }\n return (\n <RouteExecutionStoreContext value={storeRef.current}>\n {children}\n </RouteExecutionStoreContext>\n )\n}\n\nexport function useRouteExecutionStoreContext(): any {\n const useStore = use(RouteExecutionStoreContext)\n if (!useStore) {\n throw new Error(\n `You forgot to wrap your component in <${RouteExecutionStoreProvider.name}>.`\n )\n }\n return useStore\n}\n\nexport function useRouteExecutionStore<T>(\n selector: (state: RouteExecutionState) => T\n): T {\n const useStore = useRouteExecutionStoreContext()\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;AASA,MAAM,6BAA6B,cACjC,IACF;AAEA,SAAgB,4BAA4B,EAC1C,UACA,GAAG,SACsC;CACzC,MAAM,WAAW,OAA4B,IAAI;CACjD,IAAI,CAAC,SAAS,SACZ,SAAS,UAAU,0BAA0B,KAAK;CAEpD,OACE,oBAAC,4BAAD;EAA4B,OAAO,SAAS;EACzC;CACyB,CAAA;AAEhC;AAEA,SAAgB,gCAAqC;CACnD,MAAM,WAAW,IAAI,0BAA0B;CAC/C,IAAI,CAAC,UACH,MAAM,IAAI,MACR,yCAAyC,4BAA4B,KAAK,GAC5E;CAEF,OAAO;AACT;AAEA,SAAgB,uBACd,UACG;CAEH,OADiB,8BACH,CAAC,CAAC,WAAW,QAAQ,CAAC;AACtC"}
@@ -1 +1 @@
1
- {"version":3,"file":"createRouteExecutionStore.js","names":[],"sources":["../../../../src/stores/routes/createRouteExecutionStore.ts"],"sourcesContent":["import type { Route, RouteExtended } from '@lifi/sdk'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport { hasEnumFlag } from '../../utils/enum.js'\nimport type { PersistStoreProps } from '../types.js'\nimport type { RouteExecution, RouteExecutionState } from './types.js'\nimport { RouteExecutionStatus } from './types.js'\nimport {\n isRouteDone,\n isRouteFailed,\n isRoutePartiallyDone,\n isRouteRefunded,\n} from './utils.js'\n\nexport const createRouteExecutionStore = ({\n namePrefix,\n}: PersistStoreProps): UseBoundStore<StoreApi<RouteExecutionState>> =>\n create<RouteExecutionState>()(\n persist(\n (set, get) => ({\n routes: {},\n setExecutableRoute: (route: Route, observableRouteIds?: string[]) => {\n if (!get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n // clean previous idle routes\n Object.keys(routes)\n .filter(\n (routeId) =>\n !observableRouteIds?.includes(routeId) &&\n hasEnumFlag(\n routes[routeId]!.status,\n RouteExecutionStatus.Idle\n )\n )\n .forEach((routeId) => {\n delete routes[routeId]\n })\n routes[route.id] = {\n route,\n status: RouteExecutionStatus.Idle,\n }\n return {\n routes,\n }\n })\n }\n },\n updateRoute: (route: RouteExtended) => {\n if (get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const updatedState = {\n routes: {\n ...state.routes,\n [route.id]: { ...state.routes[route.id]!, route },\n },\n }\n const isFailed = isRouteFailed(route)\n if (isFailed) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Failed\n return updatedState\n }\n const isDone = isRouteDone(route)\n if (isDone) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Done\n if (isRoutePartiallyDone(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Partial\n } else if (isRouteRefunded(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Refunded\n }\n return updatedState\n }\n const isLoading = route.steps.some((step) => step.execution)\n if (isLoading) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Pending\n }\n return updatedState\n })\n }\n },\n deleteRoutes: (type, accountAddresses) =>\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n Object.keys(routes)\n .filter((routeId) => {\n const route = routes[routeId]\n if (\n accountAddresses &&\n !accountAddresses.includes(route?.route.fromAddress ?? '')\n ) {\n return false\n }\n return type === 'completed'\n ? hasEnumFlag(route?.status ?? 0, RouteExecutionStatus.Done)\n : type === 'failed'\n ? hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Failed\n )\n : !hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Done\n )\n })\n .forEach((routeId) => {\n delete routes[routeId]\n })\n return {\n routes,\n }\n }),\n deleteRoute: (routeId: string) => {\n if (get().routes[routeId]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n delete routes[routeId]\n return {\n routes,\n }\n })\n }\n },\n }),\n {\n name: `${namePrefix || 'li.fi'}-widget-routes`,\n // Bump version on breaking changes to the stored structure.\n version: 4,\n // Clear stored routes on any version mismatch to avoid errors from incompatible data shapes.\n migrate: () => ({ routes: {} }),\n partialize: (state) => ({ routes: state.routes }),\n merge: (persistedState: any, currentState: RouteExecutionState) => {\n const state = {\n ...currentState,\n ...persistedState,\n } as RouteExecutionState\n try {\n // Keep only the most recent 100 routes, evicting the oldest when the\n // limit is exceeded.\n const maxStoredRoutes = 100\n const allRoutes = Object.values(state.routes) as RouteExecution[]\n const storedRoutes = allRoutes\n .sort(\n (a, b) =>\n (b.route.steps[0]?.execution?.startedAt ?? 0) -\n (a.route.steps[0]?.execution?.startedAt ?? 0)\n )\n .slice(0, maxStoredRoutes)\n const keepIds = new Set(storedRoutes.map((r) => r.route.id))\n for (const id of Object.keys(state.routes)) {\n if (!keepIds.has(id)) {\n delete state.routes[id]\n }\n }\n } catch (error) {\n console.error(error)\n }\n return state\n },\n }\n )\n )\n"],"mappings":"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"}
1
+ {"version":3,"file":"createRouteExecutionStore.js","names":[],"sources":["../../../../src/stores/routes/createRouteExecutionStore.ts"],"sourcesContent":["import type { Route, RouteExtended } from '@lifi/sdk'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\nimport { persist } from 'zustand/middleware'\nimport { hasEnumFlag } from '../../utils/enum.js'\nimport type { PersistStoreProps } from '../types.js'\nimport type { RouteExecution, RouteExecutionState } from './types.js'\nimport { RouteExecutionStatus } from './types.js'\nimport {\n isRouteDone,\n isRouteFailed,\n isRoutePartiallyDone,\n isRouteRefunded,\n} from './utils.js'\n\nexport const createRouteExecutionStore = ({\n namePrefix,\n}: PersistStoreProps): UseBoundStore<StoreApi<RouteExecutionState>> =>\n create<RouteExecutionState>()(\n persist(\n (set, get) => ({\n routes: {},\n setExecutableRoute: (route: Route, observableRouteIds?: string[]) => {\n if (!get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n // clean previous idle routes\n Object.keys(routes)\n .filter(\n (routeId) =>\n !observableRouteIds?.includes(routeId) &&\n hasEnumFlag(\n routes[routeId]!.status,\n RouteExecutionStatus.Idle\n )\n )\n .forEach((routeId) => {\n delete routes[routeId]\n })\n routes[route.id] = {\n route,\n status: RouteExecutionStatus.Idle,\n }\n return {\n routes,\n }\n })\n }\n },\n updateRoute: (route: RouteExtended) => {\n if (get().routes[route.id]) {\n set((state: RouteExecutionState) => {\n const updatedState = {\n routes: {\n ...state.routes,\n [route.id]: { ...state.routes[route.id]!, route },\n },\n }\n const isFailed = isRouteFailed(route)\n if (isFailed) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Failed\n return updatedState\n }\n const isDone = isRouteDone(route)\n if (isDone) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Done\n if (isRoutePartiallyDone(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Partial\n } else if (isRouteRefunded(route)) {\n updatedState.routes[route.id]!.status |=\n RouteExecutionStatus.Refunded\n }\n return updatedState\n }\n const isLoading = route.steps.some((step) => step.execution)\n if (isLoading) {\n updatedState.routes[route.id]!.status =\n RouteExecutionStatus.Pending\n }\n return updatedState\n })\n }\n },\n deleteRoutes: (type, accountAddresses) =>\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n Object.keys(routes)\n .filter((routeId) => {\n const route = routes[routeId]\n if (\n accountAddresses &&\n !accountAddresses.includes(route?.route.fromAddress ?? '')\n ) {\n return false\n }\n return type === 'completed'\n ? hasEnumFlag(route?.status ?? 0, RouteExecutionStatus.Done)\n : type === 'failed'\n ? hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Failed\n )\n : !hasEnumFlag(\n route?.status ?? 0,\n RouteExecutionStatus.Done\n )\n })\n .forEach((routeId) => {\n delete routes[routeId]\n })\n return {\n routes,\n }\n }),\n deleteRoute: (routeId: string) => {\n if (get().routes[routeId]) {\n set((state: RouteExecutionState) => {\n const routes = { ...state.routes }\n delete routes[routeId]\n return {\n routes,\n }\n })\n }\n },\n }),\n {\n name: `${namePrefix || 'li.fi'}-widget-routes`,\n // Bump version on breaking changes to the stored structure.\n version: 4,\n // Clear stored routes on any version mismatch to avoid errors from incompatible data shapes.\n migrate: () => ({ routes: {} }),\n partialize: (state) => ({ routes: state.routes }),\n merge: (persistedState: any, currentState: RouteExecutionState) => {\n const state = {\n ...currentState,\n ...persistedState,\n } as RouteExecutionState\n try {\n // Keep only the most recent 100 routes, evicting the oldest when the\n // limit is exceeded.\n const maxStoredRoutes = 100\n const allRoutes = Object.values(state.routes) as RouteExecution[]\n const storedRoutes = allRoutes\n .sort(\n (a, b) =>\n (b.route.steps[0]?.execution?.startedAt ?? 0) -\n (a.route.steps[0]?.execution?.startedAt ?? 0)\n )\n .slice(0, maxStoredRoutes)\n const keepIds = new Set(storedRoutes.map((r) => r.route.id))\n for (const id of Object.keys(state.routes)) {\n if (!keepIds.has(id)) {\n delete state.routes[id]\n }\n }\n } catch (error) {\n console.error(error)\n }\n return state\n },\n }\n )\n )\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useIntermediateRoutesStore.js","names":[],"sources":["../../../../src/stores/routes/useIntermediateRoutesStore.ts"],"sourcesContent":["import type { Route } from '@lifi/sdk'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\n\ninterface IntermediateRoutesState {\n intermediateRoutes: Record<string, Route[] | undefined>\n setIntermediateRoutes: (\n key: readonly unknown[],\n routes: Route[] | undefined\n ) => void\n getIntermediateRoutes: (key: readonly unknown[]) => Route[] | undefined\n}\n\nexport const useIntermediateRoutesStore: UseBoundStore<\n StoreApi<IntermediateRoutesState>\n> = create<IntermediateRoutesState>((set, get) => ({\n intermediateRoutes: {},\n setIntermediateRoutes: (key, routes) => {\n const stringKey = JSON.stringify(key)\n // Create a new state with only the current key\n const newRoutesByKey: Record<string, Route[] | undefined> = {}\n newRoutesByKey[stringKey] = routes\n set({ intermediateRoutes: newRoutesByKey })\n },\n getIntermediateRoutes: (key) => {\n const stringKey = JSON.stringify(key)\n return get().intermediateRoutes[stringKey]\n },\n}))\n"],"mappings":";;AAaA,MAAa,6BAET,QAAiC,KAAK,SAAS;CACjD,oBAAoB,CAAC;CACrB,wBAAwB,KAAK,WAAW;EACtC,MAAM,YAAY,KAAK,UAAU,GAAG;EAEpC,MAAM,iBAAsD,CAAC;EAC7D,eAAe,aAAa;EAC5B,IAAI,EAAE,oBAAoB,eAAe,CAAC;CAC5C;CACA,wBAAwB,QAAQ;EAC9B,MAAM,YAAY,KAAK,UAAU,GAAG;EACpC,OAAO,IAAI,EAAE,mBAAmB;CAClC;AACF,EAAE"}
1
+ {"version":3,"file":"useIntermediateRoutesStore.js","names":[],"sources":["../../../../src/stores/routes/useIntermediateRoutesStore.ts"],"sourcesContent":["import type { Route } from '@lifi/sdk'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { create } from 'zustand'\n\ninterface IntermediateRoutesState {\n intermediateRoutes: Record<string, Route[] | undefined>\n setIntermediateRoutes: (\n key: readonly unknown[],\n routes: Route[] | undefined\n ) => void\n getIntermediateRoutes: (key: readonly unknown[]) => Route[] | undefined\n}\n\nexport const useIntermediateRoutesStore: UseBoundStore<\n StoreApi<IntermediateRoutesState>\n> = create<IntermediateRoutesState>((set, get) => ({\n intermediateRoutes: {},\n setIntermediateRoutes: (key, routes) => {\n const stringKey = JSON.stringify(key)\n // Create a new state with only the current key\n const newRoutesByKey: Record<string, Route[] | undefined> = {}\n newRoutesByKey[stringKey] = routes\n set({ intermediateRoutes: newRoutesByKey })\n },\n getIntermediateRoutes: (key) => {\n const stringKey = JSON.stringify(key)\n return get().intermediateRoutes[stringKey]\n },\n}))\n"],"mappings":";;AAaA,MAAa,6BAET,QAAiC,KAAK,SAAS;CACjD,oBAAoB,CAAC;CACrB,wBAAwB,KAAK,WAAW;EACtC,MAAM,YAAY,KAAK,UAAU,GAAG;EAEpC,MAAM,iBAAsD,CAAC;EAC7D,eAAe,aAAa;EAC5B,IAAI,EAAE,oBAAoB,eAAe,CAAC;CAC5C;CACA,wBAAwB,QAAQ;EAC9B,MAAM,YAAY,KAAK,UAAU,GAAG;EACpC,OAAO,IAAI,CAAC,CAAC,mBAAmB;CAClC;AACF,EAAE"}
@@ -1 +1 @@
1
- {"version":3,"file":"useRouteExecutionIndicator.js","names":[],"sources":["../../../../src/stores/routes/useRouteExecutionIndicator.ts"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport { useCallback, useMemo } from 'react'\nimport { useRouteExecutionStore } from './RouteExecutionStore.js'\nimport type { RouteExecution, RouteExecutionState } from './types.js'\nimport { RouteExecutionStatus } from './types.js'\n\nexport type RouteExecutionIndicator = {\n failed: boolean\n active: boolean\n}\n\nconst isRecentTransaction = (route: RouteExecution): boolean => {\n const startedAt = route.route.steps[0]?.execution?.startedAt ?? 0\n return startedAt > 0 && Date.now() - startedAt < 1000 * 60 * 60 * 24 // 1 day\n}\n\nexport const useRouteExecutionIndicator = (): RouteExecutionIndicator => {\n const { accounts } = useAccount()\n const accountAddresses = useMemo(\n () => accounts.map((account) => account.address),\n [accounts]\n )\n const selector = useCallback(\n (state: RouteExecutionState): RouteExecutionIndicator => {\n const routes = Object.values(state.routes) as RouteExecution[]\n const recentOwnedRoutes = routes.filter(\n (route) =>\n accountAddresses.includes(route.route.fromAddress) &&\n isRecentTransaction(route)\n )\n return {\n failed: recentOwnedRoutes.some(\n (r) => r.status === RouteExecutionStatus.Failed\n ),\n active: recentOwnedRoutes.some(\n (r) => r.status === RouteExecutionStatus.Pending\n ),\n }\n },\n [accountAddresses]\n )\n return useRouteExecutionStore(selector)\n}\n"],"mappings":";;;;AAWA,MAAM,uBAAuB,UAAmC;CAC9D,MAAM,YAAY,MAAM,MAAM,MAAM,IAAI,WAAW,aAAa;CAChE,OAAO,YAAY,KAAK,KAAK,IAAI,IAAI,YAAY,MAAO,KAAK,KAAK;AACpE;AAEA,MAAa,mCAA4D;CACvE,MAAM,EAAE,aAAa,WAAW;CAChC,MAAM,mBAAmB,cACjB,SAAS,KAAK,YAAY,QAAQ,OAAO,GAC/C,CAAC,QAAQ,CACX;CAoBA,OAAO,uBAnBU,aACd,UAAwD;EAEvD,MAAM,oBADS,OAAO,OAAO,MAAM,MACJ,EAAE,QAC9B,UACC,iBAAiB,SAAS,MAAM,MAAM,WAAW,KACjD,oBAAoB,KAAK,CAC7B;EACA,OAAO;GACL,QAAQ,kBAAkB,MACvB,MAAM,EAAE,WAAA,CACX;GACA,QAAQ,kBAAkB,MACvB,MAAM,EAAE,WAAA,CACX;EACF;CACF,GACA,CAAC,gBAAgB,CAEkB,CAAC;AACxC"}
1
+ {"version":3,"file":"useRouteExecutionIndicator.js","names":[],"sources":["../../../../src/stores/routes/useRouteExecutionIndicator.ts"],"sourcesContent":["import { useAccount } from '@lifi/wallet-management'\nimport { useCallback, useMemo } from 'react'\nimport { useRouteExecutionStore } from './RouteExecutionStore.js'\nimport type { RouteExecution, RouteExecutionState } from './types.js'\nimport { RouteExecutionStatus } from './types.js'\n\nexport type RouteExecutionIndicator = {\n failed: boolean\n active: boolean\n}\n\nconst isRecentTransaction = (route: RouteExecution): boolean => {\n const startedAt = route.route.steps[0]?.execution?.startedAt ?? 0\n return startedAt > 0 && Date.now() - startedAt < 1000 * 60 * 60 * 24 // 1 day\n}\n\nexport const useRouteExecutionIndicator = (): RouteExecutionIndicator => {\n const { accounts } = useAccount()\n const accountAddresses = useMemo(\n () => accounts.map((account) => account.address),\n [accounts]\n )\n const selector = useCallback(\n (state: RouteExecutionState): RouteExecutionIndicator => {\n const routes = Object.values(state.routes) as RouteExecution[]\n const recentOwnedRoutes = routes.filter(\n (route) =>\n accountAddresses.includes(route.route.fromAddress) &&\n isRecentTransaction(route)\n )\n return {\n failed: recentOwnedRoutes.some(\n (r) => r.status === RouteExecutionStatus.Failed\n ),\n active: recentOwnedRoutes.some(\n (r) => r.status === RouteExecutionStatus.Pending\n ),\n }\n },\n [accountAddresses]\n )\n return useRouteExecutionStore(selector)\n}\n"],"mappings":";;;;AAWA,MAAM,uBAAuB,UAAmC;CAC9D,MAAM,YAAY,MAAM,MAAM,MAAM,EAAE,EAAE,WAAW,aAAa;CAChE,OAAO,YAAY,KAAK,KAAK,IAAI,IAAI,YAAY,MAAO,KAAK,KAAK;AACpE;AAEA,MAAa,mCAA4D;CACvE,MAAM,EAAE,aAAa,WAAW;CAChC,MAAM,mBAAmB,cACjB,SAAS,KAAK,YAAY,QAAQ,OAAO,GAC/C,CAAC,QAAQ,CACX;CAoBA,OAAO,uBAnBU,aACd,UAAwD;EAEvD,MAAM,oBADS,OAAO,OAAO,MAAM,MACJ,CAAC,CAAC,QAC9B,UACC,iBAAiB,SAAS,MAAM,MAAM,WAAW,KACjD,oBAAoB,KAAK,CAC7B;EACA,OAAO;GACL,QAAQ,kBAAkB,MACvB,MAAM,EAAE,WAAA,CACX;GACA,QAAQ,kBAAkB,MACvB,MAAM,EAAE,WAAA,CACX;EACF;CACF,GACA,CAAC,gBAAgB,CAEkB,CAAC;AACxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":[],"sources":["../../../../src/stores/routes/utils.ts"],"sourcesContent":["import type { ExecutionAction, RouteExtended } from '@lifi/sdk'\nimport microdiff from 'microdiff'\n\nexport const isRouteDone = (route: RouteExtended): boolean => {\n return route.steps.every((step) => step.execution?.status === 'DONE')\n}\n\nexport const isRoutePartiallyDone = (route: RouteExtended): boolean => {\n return route.steps.some((step) =>\n step.execution?.actions?.some((action) => action.substatus === 'PARTIAL')\n )\n}\n\nexport const isRouteRefunded = (route: RouteExtended): boolean => {\n return route.steps.some((step) =>\n step.execution?.actions?.some((action) => action.substatus === 'REFUNDED')\n )\n}\n\nexport const isRouteFailed = (route: RouteExtended): boolean => {\n return route.steps.some((step) => step.execution?.status === 'FAILED')\n}\n\nexport const isRouteActive = (route?: RouteExtended): boolean => {\n if (!route) {\n return false\n }\n const isDone = isRouteDone(route)\n const isFailed = isRouteFailed(route)\n const alreadyStarted = route.steps.some((step) => step.execution)\n return !isDone && !isFailed && alreadyStarted\n}\n\nexport const getUpdatedAction = (\n currentRoute: RouteExtended,\n updatedRoute: RouteExtended\n): ExecutionAction | undefined => {\n const actionDiff = microdiff(currentRoute, updatedRoute).find((diff) =>\n diff.path.includes('actions')\n )\n if (!actionDiff) {\n return undefined\n }\n // Find action index in the diff array so we can slice the complete action object\n // e.g. ['steps', 0, 'execution', 'actions', 0, 'message']\n const actionDiffIndex = actionDiff.path.indexOf('actions') + 2\n const actionPathSlice = actionDiff.path.slice(0, actionDiffIndex)\n // Reduce updated route using the diff path to get updated process\n const action = actionPathSlice.reduce(\n (obj, path) => obj[path],\n updatedRoute as any\n ) as ExecutionAction\n return action\n}\n\nexport const getSourceTxHash = (route?: RouteExtended): string | undefined => {\n const sourceAction = route?.steps[0].execution?.actions\n ?.filter(\n (action) => !['RESET_ALLOWANCE', 'SET_ALLOWANCE'].includes(action.type)\n )\n .find((action) => action.txHash || action.taskId)\n return sourceAction?.txHash || sourceAction?.taskId\n}\n"],"mappings":";;AAGA,MAAa,eAAe,UAAkC;CAC5D,OAAO,MAAM,MAAM,OAAO,SAAS,KAAK,WAAW,WAAW,MAAM;AACtE;AAEA,MAAa,wBAAwB,UAAkC;CACrE,OAAO,MAAM,MAAM,MAAM,SACvB,KAAK,WAAW,SAAS,MAAM,WAAW,OAAO,cAAc,SAAS,CAC1E;AACF;AAEA,MAAa,mBAAmB,UAAkC;CAChE,OAAO,MAAM,MAAM,MAAM,SACvB,KAAK,WAAW,SAAS,MAAM,WAAW,OAAO,cAAc,UAAU,CAC3E;AACF;AAEA,MAAa,iBAAiB,UAAkC;CAC9D,OAAO,MAAM,MAAM,MAAM,SAAS,KAAK,WAAW,WAAW,QAAQ;AACvE;AAEA,MAAa,iBAAiB,UAAmC;CAC/D,IAAI,CAAC,OACH,OAAO;CAET,MAAM,SAAS,YAAY,KAAK;CAChC,MAAM,WAAW,cAAc,KAAK;CACpC,MAAM,iBAAiB,MAAM,MAAM,MAAM,SAAS,KAAK,SAAS;CAChE,OAAO,CAAC,UAAU,CAAC,YAAY;AACjC;AAEA,MAAa,oBACX,cACA,iBACgC;CAChC,MAAM,aAAa,UAAU,cAAc,YAAY,EAAE,MAAM,SAC7D,KAAK,KAAK,SAAS,SAAS,CAC9B;CACA,IAAI,CAAC,YACH;CAIF,MAAM,kBAAkB,WAAW,KAAK,QAAQ,SAAS,IAAI;CAO7D,OANwB,WAAW,KAAK,MAAM,GAAG,eAEpB,EAAE,QAC5B,KAAK,SAAS,IAAI,OACnB,YAEU;AACd;AAEA,MAAa,mBAAmB,UAA8C;CAC5E,MAAM,eAAe,OAAO,MAAM,GAAG,WAAW,SAC5C,QACC,WAAW,CAAC,CAAC,mBAAmB,eAAe,EAAE,SAAS,OAAO,IAAI,CACxE,EACC,MAAM,WAAW,OAAO,UAAU,OAAO,MAAM;CAClD,OAAO,cAAc,UAAU,cAAc;AAC/C"}
1
+ {"version":3,"file":"utils.js","names":[],"sources":["../../../../src/stores/routes/utils.ts"],"sourcesContent":["import type { ExecutionAction, RouteExtended } from '@lifi/sdk'\nimport microdiff from 'microdiff'\n\nexport const isRouteDone = (route: RouteExtended): boolean => {\n return route.steps.every((step) => step.execution?.status === 'DONE')\n}\n\nexport const isRoutePartiallyDone = (route: RouteExtended): boolean => {\n return route.steps.some((step) =>\n step.execution?.actions?.some((action) => action.substatus === 'PARTIAL')\n )\n}\n\nexport const isRouteRefunded = (route: RouteExtended): boolean => {\n return route.steps.some((step) =>\n step.execution?.actions?.some((action) => action.substatus === 'REFUNDED')\n )\n}\n\nexport const isRouteFailed = (route: RouteExtended): boolean => {\n return route.steps.some((step) => step.execution?.status === 'FAILED')\n}\n\nexport const isRouteActive = (route?: RouteExtended): boolean => {\n if (!route) {\n return false\n }\n const isDone = isRouteDone(route)\n const isFailed = isRouteFailed(route)\n const alreadyStarted = route.steps.some((step) => step.execution)\n return !isDone && !isFailed && alreadyStarted\n}\n\nexport const getUpdatedAction = (\n currentRoute: RouteExtended,\n updatedRoute: RouteExtended\n): ExecutionAction | undefined => {\n const actionDiff = microdiff(currentRoute, updatedRoute).find((diff) =>\n diff.path.includes('actions')\n )\n if (!actionDiff) {\n return undefined\n }\n // Find action index in the diff array so we can slice the complete action object\n // e.g. ['steps', 0, 'execution', 'actions', 0, 'message']\n const actionDiffIndex = actionDiff.path.indexOf('actions') + 2\n const actionPathSlice = actionDiff.path.slice(0, actionDiffIndex)\n // Reduce updated route using the diff path to get updated process\n const action = actionPathSlice.reduce(\n (obj, path) => obj[path],\n updatedRoute as any\n ) as ExecutionAction\n return action\n}\n\nexport const getSourceTxHash = (route?: RouteExtended): string | undefined => {\n const sourceAction = route?.steps[0].execution?.actions\n ?.filter(\n (action) => !['RESET_ALLOWANCE', 'SET_ALLOWANCE'].includes(action.type)\n )\n .find((action) => action.txHash || action.taskId)\n return sourceAction?.txHash || sourceAction?.taskId\n}\n"],"mappings":";;AAGA,MAAa,eAAe,UAAkC;CAC5D,OAAO,MAAM,MAAM,OAAO,SAAS,KAAK,WAAW,WAAW,MAAM;AACtE;AAEA,MAAa,wBAAwB,UAAkC;CACrE,OAAO,MAAM,MAAM,MAAM,SACvB,KAAK,WAAW,SAAS,MAAM,WAAW,OAAO,cAAc,SAAS,CAC1E;AACF;AAEA,MAAa,mBAAmB,UAAkC;CAChE,OAAO,MAAM,MAAM,MAAM,SACvB,KAAK,WAAW,SAAS,MAAM,WAAW,OAAO,cAAc,UAAU,CAC3E;AACF;AAEA,MAAa,iBAAiB,UAAkC;CAC9D,OAAO,MAAM,MAAM,MAAM,SAAS,KAAK,WAAW,WAAW,QAAQ;AACvE;AAEA,MAAa,iBAAiB,UAAmC;CAC/D,IAAI,CAAC,OACH,OAAO;CAET,MAAM,SAAS,YAAY,KAAK;CAChC,MAAM,WAAW,cAAc,KAAK;CACpC,MAAM,iBAAiB,MAAM,MAAM,MAAM,SAAS,KAAK,SAAS;CAChE,OAAO,CAAC,UAAU,CAAC,YAAY;AACjC;AAEA,MAAa,oBACX,cACA,iBACgC;CAChC,MAAM,aAAa,UAAU,cAAc,YAAY,CAAC,CAAC,MAAM,SAC7D,KAAK,KAAK,SAAS,SAAS,CAC9B;CACA,IAAI,CAAC,YACH;CAIF,MAAM,kBAAkB,WAAW,KAAK,QAAQ,SAAS,IAAI;CAO7D,OANwB,WAAW,KAAK,MAAM,GAAG,eAEpB,CAAC,CAAC,QAC5B,KAAK,SAAS,IAAI,OACnB,YAEU;AACd;AAEA,MAAa,mBAAmB,UAA8C;CAC5E,MAAM,eAAe,OAAO,MAAM,EAAE,CAAC,WAAW,SAC5C,QACC,WAAW,CAAC,CAAC,mBAAmB,eAAe,CAAC,CAAC,SAAS,OAAO,IAAI,CACxE,CAAC,CACA,MAAM,WAAW,OAAO,UAAU,OAAO,MAAM;CAClD,OAAO,cAAc,UAAU,cAAc;AAC/C"}
@@ -1,5 +1,5 @@
1
1
  import { createSettingsStore } from "./createSettingsStore.js";
2
- import { createContext, useContext, useRef } from "react";
2
+ import { createContext, use, useRef } from "react";
3
3
  import { useShallow } from "zustand/shallow";
4
4
  import { jsx } from "react/jsx-runtime";
5
5
  //#region src/stores/settings/SettingsStore.tsx
@@ -7,13 +7,13 @@ const SettingsStoreContext = createContext(null);
7
7
  const SettingsStoreProvider = ({ children, config }) => {
8
8
  const storeRef = useRef(null);
9
9
  if (!storeRef.current) storeRef.current = createSettingsStore(config);
10
- return /* @__PURE__ */ jsx(SettingsStoreContext.Provider, {
10
+ return /* @__PURE__ */ jsx(SettingsStoreContext, {
11
11
  value: storeRef.current,
12
12
  children
13
13
  });
14
14
  };
15
15
  function useSettingsStoreContext() {
16
- const useStore = useContext(SettingsStoreContext);
16
+ const useStore = use(SettingsStoreContext);
17
17
  if (!useStore) throw new Error("You forgot to wrap your component in SettingsStoreContext.");
18
18
  return useStore;
19
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"SettingsStore.js","names":[],"sources":["../../../../src/stores/settings/SettingsStore.tsx"],"sourcesContent":["import {\n createContext,\n type JSX,\n type PropsWithChildren,\n useContext,\n useRef,\n} from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport { createSettingsStore } from './createSettingsStore.js'\nimport type { SettingsState, SettingsStoreProviderProps } from './types.js'\n\ntype SettingsStore = UseBoundStore<StoreApi<SettingsState>>\n\nconst SettingsStoreContext = createContext<SettingsStore | null>(null)\n\nexport const SettingsStoreProvider = ({\n children,\n config,\n}: PropsWithChildren<SettingsStoreProviderProps>): JSX.Element => {\n const storeRef = useRef<SettingsStore>(null)\n if (!storeRef.current) {\n storeRef.current = createSettingsStore(config)\n }\n return (\n <SettingsStoreContext.Provider value={storeRef.current}>\n {children}\n </SettingsStoreContext.Provider>\n )\n}\n\nexport function useSettingsStoreContext(): any {\n const useStore = useContext(SettingsStoreContext)\n if (!useStore) {\n throw new Error(\n 'You forgot to wrap your component in SettingsStoreContext.'\n )\n }\n return useStore\n}\n\nexport function useSettingsStore<T>(selector: (state: SettingsState) => T): T {\n const useStore = useSettingsStoreContext()\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;AAcA,MAAM,uBAAuB,cAAoC,IAAI;AAErE,MAAa,yBAAyB,EACpC,UACA,aACgE;CAChE,MAAM,WAAW,OAAsB,IAAI;CAC3C,IAAI,CAAC,SAAS,SACZ,SAAS,UAAU,oBAAoB,MAAM;CAE/C,OACE,oBAAC,qBAAqB,UAAtB;EAA+B,OAAO,SAAS;EAC5C;CAC4B,CAAA;AAEnC;AAEA,SAAgB,0BAA+B;CAC7C,MAAM,WAAW,WAAW,oBAAoB;CAChD,IAAI,CAAC,UACH,MAAM,IAAI,MACR,4DACF;CAEF,OAAO;AACT;AAEA,SAAgB,iBAAoB,UAA0C;CAE5E,OADiB,wBACH,EAAE,WAAW,QAAQ,CAAC;AACtC"}
1
+ {"version":3,"file":"SettingsStore.js","names":[],"sources":["../../../../src/stores/settings/SettingsStore.tsx"],"sourcesContent":["import {\n createContext,\n type JSX,\n type PropsWithChildren,\n use,\n useRef,\n} from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport { useShallow } from 'zustand/shallow'\nimport { createSettingsStore } from './createSettingsStore.js'\nimport type { SettingsState, SettingsStoreProviderProps } from './types.js'\n\ntype SettingsStore = UseBoundStore<StoreApi<SettingsState>>\n\nconst SettingsStoreContext = createContext<SettingsStore | null>(null)\n\nexport const SettingsStoreProvider = ({\n children,\n config,\n}: PropsWithChildren<SettingsStoreProviderProps>): JSX.Element => {\n const storeRef = useRef<SettingsStore>(null)\n if (!storeRef.current) {\n storeRef.current = createSettingsStore(config)\n }\n return (\n <SettingsStoreContext value={storeRef.current}>\n {children}\n </SettingsStoreContext>\n )\n}\n\nexport function useSettingsStoreContext(): any {\n const useStore = use(SettingsStoreContext)\n if (!useStore) {\n throw new Error(\n 'You forgot to wrap your component in SettingsStoreContext.'\n )\n }\n return useStore\n}\n\nexport function useSettingsStore<T>(selector: (state: SettingsState) => T): T {\n const useStore = useSettingsStoreContext()\n return useStore(useShallow(selector))\n}\n"],"mappings":";;;;;AAcA,MAAM,uBAAuB,cAAoC,IAAI;AAErE,MAAa,yBAAyB,EACpC,UACA,aACgE;CAChE,MAAM,WAAW,OAAsB,IAAI;CAC3C,IAAI,CAAC,SAAS,SACZ,SAAS,UAAU,oBAAoB,MAAM;CAE/C,OACE,oBAAC,sBAAD;EAAsB,OAAO,SAAS;EACnC;CACmB,CAAA;AAE1B;AAEA,SAAgB,0BAA+B;CAC7C,MAAM,WAAW,IAAI,oBAAoB;CACzC,IAAI,CAAC,UACH,MAAM,IAAI,MACR,4DACF;CAEF,OAAO;AACT;AAEA,SAAgB,iBAAoB,UAA0C;CAE5E,OADiB,wBACH,CAAC,CAAC,WAAW,QAAQ,CAAC;AACtC"}
@@ -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) => create()(persist((set, get) => ({
24
- ...defaultSettings,
25
- setValue: (key, value) => set(() => ({ [key]: value })),
26
- setValues: (values) => set(() => ({ ...values })),
27
- getSettings: () => getStateValues(get()),
28
- getValue: (key) => get()[key],
29
- initializeTools: (toolType, tools, reset) => {
30
- if (!tools.length) return;
31
- set((state) => {
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}`]: enabledTools,
55
- [`enabled${toolType}`]: enabledToolKeys.filter((key) => enabledTools[key]),
56
- [`disabled${toolType}`]: enabledToolKeys.filter((key) => !enabledTools[key])
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
- SettingsToolTypes.forEach((toolType) => {
99
- if (persistedState?.[`_enabled${toolType}`]) {
100
- const enabledToolKeys = Object.keys(persistedState[`_enabled${toolType}`]);
101
- state[`enabled${toolType}`] = enabledToolKeys.filter((key) => persistedState[`_enabled${toolType}`][key]);
102
- state[`disabled${toolType}`] = enabledToolKeys.filter((key) => !persistedState[`_enabled${toolType}`][key]);
103
- }
104
- });
105
- return state;
106
- },
107
- migrate: () => ({}),
108
- onRehydrateStorage: () => {
109
- const initializeLanguageSettings = async (state, initialLanguage) => {
110
- const customLanguages = Object.keys(config?.languageResources || {}).filter((key) => !allLanguages.includes(key));
111
- if (initialLanguage && initialLanguage !== "en" && !customLanguages.includes(initialLanguage)) await loadLocale(initialLanguage, config?.languageResources?.[initialLanguage]).then((languageResource) => {
112
- state.setValues({
113
- language: initialLanguage,
114
- languageCache: languageResource
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
- return (state) => {
119
- if (state) initializeLanguageSettings(state, state.getValue("language") || config?.languages?.default);
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":";;;;;;UAgBiB,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
+ {"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 { PropsWithChildren } from 'react'\nimport type { StoreApi, UseBoundStore } from 'zustand'\nimport type { LanguageResource } from '../../providers/I18nProvider/types.js'\nimport type { SplitMode, 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 SplitModeState {\n state?: SplitMode\n setState(state: SplitMode): void\n}\n\nexport type SplitModeStore = UseBoundStore<StoreApi<SplitModeState>>\n\nexport interface SplitModeProps {\n state?: SplitMode\n}\n\nexport type SplitModeProviderProps = PropsWithChildren<SplitModeProps>\n\nexport interface SettingsStoreProviderProps {\n config: WidgetConfig\n}\n"],"mappings":";AAaA,MAAa,oBAAoB,CAAC,WAAW,WAAW"}
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,EAA8B,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,EAAE,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,WAC9C,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
+ {"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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"}