@rainlanguage/ui-components 0.0.1-alpha.24 → 0.0.1-alpha.241

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 (299) hide show
  1. package/README.md +14 -6
  2. package/dist/__fixtures__/settings.yaml +123 -0
  3. package/dist/__mocks__/CodeMirrorRainlang.svelte +4 -0
  4. package/dist/__mocks__/CodeMirrorRainlang.svelte.d.ts +18 -0
  5. package/dist/__mocks__/MockCodeMirrorEditor.svelte +17 -0
  6. package/dist/__mocks__/MockCodeMirrorEditor.svelte.d.ts +21 -0
  7. package/dist/__mocks__/MockComponent.js +1 -1
  8. package/dist/__mocks__/MockComponent.svelte +10 -2
  9. package/dist/__mocks__/MockComponent.svelte.d.ts +4 -1
  10. package/dist/__mocks__/mockWeb3Config.d.ts +1 -1
  11. package/dist/__mocks__/mockWeb3Config.js +10 -7
  12. package/dist/__mocks__/queries.js +9 -9
  13. package/dist/__mocks__/stores.d.ts +55 -45
  14. package/dist/__mocks__/stores.js +85 -68
  15. package/dist/app.css +3 -3
  16. package/dist/components/ButtonDarkMode.svelte +7 -1
  17. package/dist/components/ButtonLoading.svelte +1 -1
  18. package/dist/components/ButtonScrub.svelte +22 -0
  19. package/dist/components/ButtonScrub.svelte.d.ts +25 -0
  20. package/dist/components/ButtonVaultLink.svelte +12 -11
  21. package/dist/components/ButtonVaultLink.svelte.d.ts +4 -3
  22. package/dist/components/CheckboxInactiveOrdersVault.svelte +20 -0
  23. package/dist/components/CheckboxInactiveOrdersVault.svelte.d.ts +19 -0
  24. package/dist/components/CheckboxZeroBalanceVault.svelte.d.ts +2 -2
  25. package/dist/components/CodeMirrorDotrain.svelte +4 -0
  26. package/dist/components/CodeMirrorDotrain.svelte.d.ts +1 -0
  27. package/dist/components/CodeMirrorRainlang.svelte +20 -12
  28. package/dist/components/CodeMirrorRainlang.svelte.d.ts +3 -2
  29. package/dist/components/EditableSpan.svelte +3 -14
  30. package/dist/components/EditableSpan.svelte.d.ts +0 -1
  31. package/dist/components/Hash.svelte +6 -5
  32. package/dist/components/License.svelte +5 -4
  33. package/dist/components/ListViewRaindexFilters.svelte +64 -0
  34. package/dist/components/ListViewRaindexFilters.svelte.d.ts +32 -0
  35. package/dist/components/LocalDbStatusBadge.svelte +27 -0
  36. package/dist/components/LocalDbStatusBadge.svelte.d.ts +19 -0
  37. package/dist/components/LocalDbStatusCard.svelte +43 -0
  38. package/dist/components/LocalDbStatusCard.svelte.d.ts +20 -0
  39. package/dist/components/LocalDbStatusModal.svelte +105 -0
  40. package/dist/components/LocalDbStatusModal.svelte.d.ts +21 -0
  41. package/dist/components/OrderOrVaultHash.svelte +12 -12
  42. package/dist/components/OrderOrVaultHash.svelte.d.ts +4 -4
  43. package/dist/components/PageHeader.svelte +1 -1
  44. package/dist/components/Sensitive.svelte +16 -0
  45. package/dist/components/Sensitive.svelte.d.ts +28 -0
  46. package/dist/components/TanstackAppTable.svelte +270 -60
  47. package/dist/components/TanstackAppTable.svelte.d.ts +15 -9
  48. package/dist/components/ToastDetail.svelte +42 -0
  49. package/dist/components/ToastDetail.svelte.d.ts +20 -0
  50. package/dist/components/Tooltip.svelte +8 -0
  51. package/dist/components/Tooltip.svelte.d.ts +21 -0
  52. package/dist/components/VaultBalanceChangeTypeFilter.svelte +23 -0
  53. package/dist/components/VaultBalanceChangeTypeFilter.svelte.d.ts +19 -0
  54. package/dist/components/VaultCard.svelte +18 -0
  55. package/dist/components/VaultCard.svelte.d.ts +19 -0
  56. package/dist/components/charts/LightweightChart.svelte +1 -1
  57. package/dist/components/charts/LightweightChart.svelte.d.ts +5 -5
  58. package/dist/components/charts/OrderTradesChart.svelte +319 -28
  59. package/dist/components/charts/OrderTradesChart.svelte.d.ts +4 -4
  60. package/dist/components/charts/TanstackLightweightChartLine.svelte +5 -9
  61. package/dist/components/charts/VaultBalanceChart.svelte +8 -26
  62. package/dist/components/charts/VaultBalanceChart.svelte.d.ts +1 -7
  63. package/dist/components/charts/transformAndSortData.d.ts +24 -0
  64. package/dist/components/charts/transformAndSortData.js +111 -0
  65. package/dist/components/checkbox/CheckboxActiveOrders.svelte +11 -0
  66. package/dist/components/checkbox/CheckboxActiveOrders.svelte.d.ts +19 -0
  67. package/dist/components/deployment/ButtonSelectOption.svelte +2 -0
  68. package/dist/components/deployment/ButtonSelectOption.svelte.d.ts +1 -0
  69. package/dist/components/deployment/ComposedRainlangModal.svelte +3 -2
  70. package/dist/components/deployment/ComposedRainlangModal.svelte.d.ts +1 -4
  71. package/dist/components/deployment/DeploymentSectionHeader.svelte +7 -4
  72. package/dist/components/deployment/DeploymentSteps.svelte +196 -221
  73. package/dist/components/deployment/DeploymentSteps.svelte.d.ts +6 -12
  74. package/dist/components/deployment/DeploymentTile.svelte +2 -2
  75. package/dist/components/deployment/DeploymentTile.svelte.d.ts +1 -1
  76. package/dist/components/deployment/DeploymentsSection.svelte +15 -22
  77. package/dist/components/deployment/DeploymentsSection.svelte.d.ts +3 -2
  78. package/dist/components/deployment/DepositInput.svelte +10 -11
  79. package/dist/components/deployment/DepositInput.svelte.d.ts +2 -3
  80. package/dist/components/deployment/DisclaimerModal.svelte +6 -7
  81. package/dist/components/deployment/FieldDefinitionInput.svelte +10 -14
  82. package/dist/components/deployment/FieldDefinitionInput.svelte.d.ts +2 -3
  83. package/dist/components/deployment/InvalidOrdersSection.svelte +17 -0
  84. package/dist/components/deployment/InvalidOrdersSection.svelte.d.ts +19 -0
  85. package/dist/components/deployment/{StrategyPage.svelte → OrderPage.svelte} +15 -24
  86. package/dist/components/deployment/OrderPage.svelte.d.ts +21 -0
  87. package/dist/components/deployment/SelectToken.svelte +127 -50
  88. package/dist/components/deployment/SelectToken.svelte.d.ts +5 -4
  89. package/dist/components/deployment/TokenBalance.svelte +19 -0
  90. package/dist/components/deployment/TokenBalance.svelte.d.ts +19 -0
  91. package/dist/components/deployment/TokenIOInput.svelte +27 -17
  92. package/dist/components/deployment/TokenIOInput.svelte.d.ts +3 -3
  93. package/dist/components/deployment/TokenSelectionModal.svelte +148 -0
  94. package/dist/components/deployment/TokenSelectionModal.svelte.d.ts +20 -0
  95. package/dist/components/deployment/{ValidStrategiesSection.svelte → ValidOrdersSection.svelte} +7 -7
  96. package/dist/components/deployment/ValidOrdersSection.svelte.d.ts +19 -0
  97. package/dist/components/deployment/VaultIdInformation.svelte +17 -0
  98. package/dist/components/deployment/VaultIdInformation.svelte.d.ts +21 -0
  99. package/dist/components/detail/OrderDetail.svelte +220 -82
  100. package/dist/components/detail/OrderDetail.svelte.d.ts +21 -15
  101. package/dist/components/detail/TanstackOrderQuote.svelte +114 -46
  102. package/dist/components/detail/TanstackOrderQuote.svelte.d.ts +14 -16
  103. package/dist/components/detail/VaultDetail.svelte +82 -79
  104. package/dist/components/detail/VaultDetail.svelte.d.ts +12 -18
  105. package/dist/components/dropdown/DropdownActiveNetworks.svelte +44 -0
  106. package/dist/components/dropdown/DropdownActiveNetworks.svelte.d.ts +19 -0
  107. package/dist/components/dropdown/DropdownCheckbox.svelte +4 -4
  108. package/dist/components/dropdown/DropdownRaindexesFilter.svelte +172 -0
  109. package/dist/components/dropdown/DropdownRaindexesFilter.svelte.d.ts +25 -0
  110. package/dist/components/dropdown/DropdownTokensFilter.svelte +152 -0
  111. package/dist/components/dropdown/DropdownTokensFilter.svelte.d.ts +28 -0
  112. package/dist/components/icon/Refresh.svelte +4 -2
  113. package/dist/components/icon/Refresh.svelte.d.ts +2 -0
  114. package/dist/components/input/InputOrderHash.svelte +1 -1
  115. package/dist/components/input/InputOrderHash.svelte.d.ts +3 -3
  116. package/dist/components/input/InputOwnerFilter.svelte +48 -0
  117. package/dist/components/input/InputOwnerFilter.svelte.d.ts +19 -0
  118. package/dist/components/input/InputRegistryUrl.svelte +36 -14
  119. package/dist/components/input/InputToken.svelte +2 -2
  120. package/dist/components/input/InputTokenAmount.svelte +30 -20
  121. package/dist/components/input/InputTokenAmount.svelte.d.ts +3 -3
  122. package/dist/components/tables/OrderAPY.svelte +6 -33
  123. package/dist/components/tables/OrderAPY.svelte.d.ts +1 -4
  124. package/dist/components/tables/OrderTradesListTable.svelte +132 -124
  125. package/dist/components/tables/OrderTradesListTable.svelte.d.ts +4 -4
  126. package/dist/components/tables/OrderVaultsVolTable.svelte +17 -22
  127. package/dist/components/tables/OrderVaultsVolTable.svelte.d.ts +2 -2
  128. package/dist/components/tables/OrdersListTable.svelte +206 -115
  129. package/dist/components/tables/OrdersListTable.svelte.d.ts +18 -23
  130. package/dist/components/tables/VaultBalanceChangesTable.svelte +83 -43
  131. package/dist/components/tables/VaultBalanceChangesTable.svelte.d.ts +13 -11
  132. package/dist/components/tables/VaultsListTable.svelte +275 -150
  133. package/dist/components/tables/VaultsListTable.svelte.d.ts +24 -33
  134. package/dist/components/transactions/FixedBottomTransaction.svelte +64 -0
  135. package/dist/components/transactions/FixedBottomTransaction.svelte.d.ts +16 -0
  136. package/dist/components/transactions/TransactionDetail.svelte +31 -0
  137. package/dist/components/transactions/TransactionDetail.svelte.d.ts +20 -0
  138. package/dist/components/transactions/TransactionList.svelte +17 -0
  139. package/dist/components/transactions/TransactionList.svelte.d.ts +16 -0
  140. package/dist/components/transactions/getStatusEmoji.d.ts +2 -0
  141. package/dist/components/transactions/getStatusEmoji.js +20 -0
  142. package/dist/components/wallet/WalletConnect.svelte +5 -4
  143. package/dist/components/wallet/WalletConnect.svelte.d.ts +0 -1
  144. package/dist/consts.d.ts +1 -0
  145. package/dist/consts.js +1 -0
  146. package/dist/errors/DeploymentStepsError.d.ts +11 -5
  147. package/dist/errors/DeploymentStepsError.js +13 -7
  148. package/dist/errors/index.d.ts +1 -1
  149. package/dist/errors/index.js +1 -1
  150. package/dist/hooks/useLocalDb.d.ts +3 -0
  151. package/dist/hooks/useLocalDb.js +10 -0
  152. package/dist/hooks/useRaindexClient.d.ts +3 -0
  153. package/dist/hooks/useRaindexClient.js +11 -0
  154. package/dist/hooks/useRaindexOrderBuilder.d.ts +3 -0
  155. package/dist/hooks/useRaindexOrderBuilder.js +11 -0
  156. package/dist/index.d.ts +122 -91
  157. package/dist/index.js +118 -87
  158. package/dist/models/Transaction.d.ts +75 -0
  159. package/dist/models/Transaction.js +100 -0
  160. package/dist/providers/LocalDbProvider.svelte +8 -0
  161. package/dist/providers/LocalDbProvider.svelte.d.ts +21 -0
  162. package/dist/providers/RaindexClientProvider.svelte +8 -0
  163. package/dist/providers/RaindexClientProvider.svelte.d.ts +21 -0
  164. package/dist/providers/RaindexOrderBuilderProvider.svelte +8 -0
  165. package/dist/providers/RaindexOrderBuilderProvider.svelte.d.ts +21 -0
  166. package/dist/providers/dotrainRegistry/DotrainRegistryProvider.svelte +8 -0
  167. package/dist/providers/dotrainRegistry/DotrainRegistryProvider.svelte.d.ts +24 -0
  168. package/dist/providers/dotrainRegistry/context.d.ts +9 -0
  169. package/dist/providers/dotrainRegistry/context.js +43 -0
  170. package/dist/providers/dotrainRegistry/useDotrainRegistry.d.ts +5 -0
  171. package/dist/providers/dotrainRegistry/useDotrainRegistry.js +35 -0
  172. package/dist/providers/registry/RegistryManager.d.ts +65 -0
  173. package/dist/providers/registry/RegistryManager.js +134 -0
  174. package/dist/providers/registry/RegistryProvider.svelte +6 -0
  175. package/dist/providers/registry/RegistryProvider.svelte.d.ts +21 -0
  176. package/dist/providers/registry/context.d.ts +10 -0
  177. package/dist/providers/registry/context.js +46 -0
  178. package/dist/providers/registry/useRegistry.d.ts +7 -0
  179. package/dist/providers/registry/useRegistry.js +29 -0
  180. package/dist/providers/toasts/ToastProvider.svelte +17 -0
  181. package/dist/providers/toasts/ToastProvider.svelte.d.ts +18 -0
  182. package/dist/providers/toasts/context.d.ts +14 -0
  183. package/dist/providers/toasts/context.js +22 -0
  184. package/dist/providers/toasts/useToasts.d.ts +16 -0
  185. package/dist/providers/toasts/useToasts.js +63 -0
  186. package/dist/providers/transactions/TransactionManager.d.ts +234 -0
  187. package/dist/providers/transactions/TransactionManager.js +509 -0
  188. package/dist/providers/transactions/TransactionProvider.svelte +11 -0
  189. package/dist/providers/transactions/TransactionProvider.svelte.d.ts +24 -0
  190. package/dist/providers/transactions/context.d.ts +19 -0
  191. package/dist/providers/transactions/context.js +28 -0
  192. package/dist/providers/transactions/useTransactions.d.ts +13 -0
  193. package/dist/providers/transactions/useTransactions.js +18 -0
  194. package/dist/providers/wallet/WalletProvider.svelte +7 -0
  195. package/dist/providers/wallet/WalletProvider.svelte.d.ts +21 -0
  196. package/dist/providers/wallet/context.d.ts +10 -0
  197. package/dist/providers/wallet/context.js +47 -0
  198. package/dist/providers/wallet/useAccount.d.ts +8 -0
  199. package/dist/providers/wallet/useAccount.js +148 -0
  200. package/dist/queries/keys.d.ts +1 -0
  201. package/dist/queries/keys.js +10 -9
  202. package/dist/queries/queryClient.d.ts +2 -2
  203. package/dist/queries/queryClient.js +16 -11
  204. package/dist/services/awaitTransactionIndexing.d.ts +107 -0
  205. package/dist/services/awaitTransactionIndexing.js +60 -0
  206. package/dist/services/getExplorerLink.d.ts +1 -1
  207. package/dist/services/getExplorerLink.js +3 -5
  208. package/dist/services/handleShareChoices.d.ts +2 -2
  209. package/dist/services/handleShareChoices.js +6 -5
  210. package/dist/services/historicalOrderCharts.d.ts +3 -3
  211. package/dist/services/historicalOrderCharts.js +364 -371
  212. package/dist/services/index.d.ts +5 -2
  213. package/dist/services/index.js +3 -1
  214. package/dist/services/loadRegistryUrl.d.ts +2 -0
  215. package/dist/services/loadRegistryUrl.js +22 -0
  216. package/dist/services/pairTradesChartData.d.ts +47 -0
  217. package/dist/services/pairTradesChartData.js +194 -0
  218. package/dist/services/registry.d.ts +5 -5
  219. package/dist/services/registry.js +17 -217
  220. package/dist/services/time.d.ts +12 -0
  221. package/dist/services/time.js +88 -6
  222. package/dist/services/validateAmount.d.ts +30 -0
  223. package/dist/services/validateAmount.js +53 -0
  224. package/dist/storesGeneric/cachedWritableStore.d.ts +57 -0
  225. package/dist/storesGeneric/cachedWritableStore.js +93 -0
  226. package/dist/storesGeneric/scrub.d.ts +14 -0
  227. package/dist/storesGeneric/scrub.js +22 -0
  228. package/dist/test/matchers.d.ts +2 -2
  229. package/dist/test/matchers.js +2 -2
  230. package/dist/types/account.d.ts +3 -0
  231. package/dist/types/appStores.d.ts +9 -16
  232. package/dist/types/modal.d.ts +26 -14
  233. package/dist/types/order.d.ts +10 -0
  234. package/dist/types/order.js +1 -0
  235. package/dist/types/toast.d.ts +11 -0
  236. package/dist/types/toast.js +1 -0
  237. package/dist/types/tokenBalance.d.ts +6 -0
  238. package/dist/types/tokenBalance.js +1 -0
  239. package/dist/types/transaction.d.ts +67 -22
  240. package/dist/types/transaction.js +31 -1
  241. package/dist/utils/breadcrumbs.js +2 -2
  242. package/dist/utils/codeMirrorThemes.js +80 -74
  243. package/dist/utils/configHelpers.d.ts +4 -0
  244. package/dist/utils/configHelpers.js +21 -0
  245. package/dist/utils/constructHashLink.d.ts +24 -0
  246. package/dist/utils/constructHashLink.js +117 -0
  247. package/dist/utils/getNetworkName.d.ts +1 -0
  248. package/dist/utils/getNetworkName.js +13 -0
  249. package/dist/utils/hex.js +1 -1
  250. package/dist/utils/lightweightChartsThemes.d.ts +1 -1
  251. package/dist/utils/lightweightChartsThemes.js +11 -11
  252. package/dist/utils/localDbStatus.d.ts +26 -0
  253. package/dist/utils/localDbStatus.js +22 -0
  254. package/dist/utils/number.d.ts +0 -7
  255. package/dist/utils/number.js +5 -30
  256. package/dist/utils/stripTrailingWhitespace.d.ts +16 -0
  257. package/dist/utils/stripTrailingWhitespace.js +22 -0
  258. package/dist/utils/tokens.d.ts +2 -0
  259. package/dist/utils/tokens.js +3 -0
  260. package/dist/utils/vaultBalanceChangeLabels.d.ts +4 -0
  261. package/dist/utils/vaultBalanceChangeLabels.js +18 -0
  262. package/package.json +89 -84
  263. package/dist/__fixtures__/orderDetail.d.ts +0 -99
  264. package/dist/__fixtures__/orderDetail.js +0 -204
  265. package/dist/__fixtures__/settings-12-11-24.json +0 -160
  266. package/dist/__mocks__/mockTransactionStore.d.ts +0 -22
  267. package/dist/__mocks__/mockTransactionStore.js +0 -56
  268. package/dist/__mocks__/settings.d.ts +0 -3
  269. package/dist/__mocks__/settings.js +0 -37
  270. package/dist/components/CheckboxMyItemsOnly.svelte +0 -23
  271. package/dist/components/CheckboxMyItemsOnly.svelte.d.ts +0 -21
  272. package/dist/components/ListViewOrderbookFilters.svelte +0 -58
  273. package/dist/components/ListViewOrderbookFilters.svelte.d.ts +0 -28
  274. package/dist/components/deployment/InvalidStrategiesSection.svelte +0 -19
  275. package/dist/components/deployment/InvalidStrategiesSection.svelte.d.ts +0 -19
  276. package/dist/components/deployment/StrategyPage.svelte.d.ts +0 -19
  277. package/dist/components/deployment/ValidStrategiesSection.svelte.d.ts +0 -19
  278. package/dist/components/deployment/getDeploymentTransactionArgs.d.ts +0 -17
  279. package/dist/components/deployment/getDeploymentTransactionArgs.js +0 -28
  280. package/dist/components/detail/DepositOrWithdrawButtons.svelte +0 -44
  281. package/dist/components/detail/DepositOrWithdrawButtons.svelte.d.ts +0 -26
  282. package/dist/components/dropdown/DropdownActiveSubgraphs.svelte +0 -38
  283. package/dist/components/dropdown/DropdownActiveSubgraphs.svelte.d.ts +0 -21
  284. package/dist/components/dropdown/DropdownOrderListAccounts.svelte +0 -15
  285. package/dist/components/dropdown/DropdownOrderListAccounts.svelte.d.ts +0 -20
  286. package/dist/components/dropdown/DropdownOrderStatus.svelte +0 -31
  287. package/dist/components/dropdown/DropdownOrderStatus.svelte.d.ts +0 -19
  288. package/dist/hooks/useGui.d.ts +0 -3
  289. package/dist/hooks/useGui.js +0 -11
  290. package/dist/providers/GuiProvider.svelte +0 -8
  291. package/dist/providers/GuiProvider.svelte.d.ts +0 -21
  292. package/dist/stores/transactionStore.d.ts +0 -98
  293. package/dist/stores/transactionStore.js +0 -303
  294. package/dist/types/strategy.d.ts +0 -10
  295. package/dist/utils/time.d.ts +0 -12
  296. package/dist/utils/time.js +0 -27
  297. package/dist/utils/vault.d.ts +0 -2
  298. package/dist/utils/vault.js +0 -29
  299. /package/dist/types/{strategy.js → account.js} +0 -0
@@ -1,228 +1,353 @@
1
- <script generics="T">import { Button, Dropdown, DropdownItem, TableBodyCell, TableHeadCell } from "flowbite-svelte";
1
+ <script>import { toHex } from "viem";
2
+ import { useRaindexClient } from "../../hooks/useRaindexClient";
3
+ import {
4
+ Button,
5
+ Checkbox,
6
+ Dropdown,
7
+ DropdownItem,
8
+ TableBodyCell,
9
+ TableHeadCell
10
+ } from "flowbite-svelte";
2
11
  import { goto } from "$app/navigation";
3
- import { DotsVerticalOutline } from "flowbite-svelte-icons";
4
- import { createInfiniteQuery } from "@tanstack/svelte-query";
12
+ import { ArrowUpFromBracketOutline, DotsVerticalOutline } from "flowbite-svelte-icons";
13
+ import { createInfiniteQuery, createQuery } from "@tanstack/svelte-query";
5
14
  import TanstackAppTable from "../TanstackAppTable.svelte";
6
- import ListViewOrderbookFilters from "../ListViewOrderbookFilters.svelte";
15
+ import ListViewRaindexFilters from "../ListViewRaindexFilters.svelte";
7
16
  import OrderOrVaultHash from "../OrderOrVaultHash.svelte";
8
17
  import Hash, { HashType } from "../Hash.svelte";
9
18
  import { DEFAULT_PAGE_SIZE, DEFAULT_REFRESH_INTERVAL } from "../../queries/constants";
10
- import { vaultBalanceDisplay } from "../../utils/vault";
11
- import { bigintStringToHex } from "../../utils/hex";
12
- import {} from "@rainlanguage/orderbook/js_api";
13
- import {} from "@rainlanguage/orderbook/js_api";
14
- import { QKEY_VAULTS } from "../../queries/keys";
15
19
  import {
16
- getVaults
17
- } from "@rainlanguage/orderbook/js_api";
18
- import {} from "svelte/store";
19
- export let activeOrderbook;
20
- export let subgraphUrl;
21
- export let accounts;
22
- export let activeAccountsItems;
20
+ Float,
21
+ RaindexClient,
22
+ RaindexVault,
23
+ RaindexVaultsList
24
+ } from "@rainlanguage/raindex";
25
+ import { QKEY_TOKENS, QKEY_VAULTS } from "../../queries/keys";
26
+ import { useAccount } from "../../providers/wallet/useAccount";
27
+ import { getNetworkName } from "../../utils/getNetworkName";
28
+ import { getAllContexts } from "svelte";
29
+ import Tooltip from "../Tooltip.svelte";
30
+ import { useToasts } from "../../providers/toasts/useToasts";
31
+ const context = getAllContexts();
32
+ const { errToast } = useToasts();
23
33
  export let orderHash;
24
- export let activeSubgraphs;
25
- export let settings;
26
- export let activeOrderStatus;
34
+ export let showInactiveOrders;
27
35
  export let hideZeroBalanceVaults;
28
- export let activeNetworkRef;
29
- export let activeOrderbookRef;
30
- export let activeAccounts;
31
- export let walletAddressMatchesOrBlank;
32
- export let handleDepositGenericModal = void 0;
36
+ export let hideInactiveOrdersVaults;
37
+ export let activeTokens;
38
+ export let selectedChainIds;
39
+ export let activeRaindexAddresses;
40
+ export let ownerFilter;
33
41
  export let handleDepositModal = void 0;
34
42
  export let handleWithdrawModal = void 0;
35
- export let currentRoute;
36
- export let showMyItemsOnly;
37
- export let signerAddress;
38
- $: multiSubgraphArgs = Object.entries(
39
- Object.keys($activeSubgraphs ?? {}).length ? $activeSubgraphs : $settings?.subgraphs ?? {}
40
- ).map(([name, url]) => ({
41
- name,
42
- url
43
- }));
44
- $: owners = $activeAccountsItems && Object.values($activeAccountsItems).length > 0 ? Object.values($activeAccountsItems) : $showMyItemsOnly && $signerAddress ? [$signerAddress] : [];
43
+ export let onWithdrawAll = void 0;
44
+ const { account } = useAccount();
45
+ const raindexClient = useRaindexClient();
46
+ $: ownerAddress = $ownerFilter?.trim() || "";
47
+ $: owners = ownerAddress ? [ownerAddress] : [];
48
+ $: tokensQuery = createQuery({
49
+ queryKey: [QKEY_TOKENS, $selectedChainIds],
50
+ queryFn: async () => {
51
+ const result = await raindexClient.getAllVaultTokens($selectedChainIds);
52
+ if (result.error) throw new Error(result.error.readableMsg);
53
+ return result.value;
54
+ },
55
+ enabled: true
56
+ });
57
+ $: selectedTokens = $activeTokens?.filter(
58
+ (address) => !$tokensQuery.data || $tokensQuery.data.some((t) => t.address === address)
59
+ ) ?? [];
60
+ $: raindexesMap = raindexClient.getAllRaindexes()?.value ?? /* @__PURE__ */ new Map();
61
+ $: availableRaindexAddresses = (() => {
62
+ const addrs = [];
63
+ raindexesMap.forEach((cfg) => {
64
+ if ($selectedChainIds.length === 0 || $selectedChainIds.includes(cfg.network.chainId)) {
65
+ addrs.push(cfg.address.toLowerCase());
66
+ }
67
+ });
68
+ return addrs;
69
+ })();
70
+ $: selectedRaindexAddresses = $activeRaindexAddresses?.filter(
71
+ (address) => availableRaindexAddresses.includes(address.toLowerCase())
72
+ ) ?? [];
45
73
  $: query = createInfiniteQuery({
46
74
  queryKey: [
47
75
  QKEY_VAULTS,
48
- $activeAccounts,
49
76
  $hideZeroBalanceVaults,
50
- $activeSubgraphs,
51
- multiSubgraphArgs,
52
- $settings,
53
- owners
77
+ $hideInactiveOrdersVaults,
78
+ $selectedChainIds,
79
+ ownerAddress,
80
+ selectedTokens,
81
+ selectedRaindexAddresses
54
82
  ],
55
- queryFn: ({ pageParam }) => {
56
- return getVaults(
57
- multiSubgraphArgs,
83
+ queryFn: async ({ pageParam }) => {
84
+ const result = await raindexClient.getVaults(
85
+ $selectedChainIds,
58
86
  {
59
87
  owners,
60
- hideZeroBalance: $hideZeroBalanceVaults
88
+ hideZeroBalance: $hideZeroBalanceVaults,
89
+ tokens: selectedTokens,
90
+ raindexAddresses: selectedRaindexAddresses.length > 0 ? selectedRaindexAddresses : void 0,
91
+ onlyActiveOrders: $hideInactiveOrdersVaults
61
92
  },
62
- { page: pageParam + 1, pageSize: DEFAULT_PAGE_SIZE }
93
+ pageParam + 1,
94
+ DEFAULT_PAGE_SIZE
63
95
  );
96
+ if (result.error) throw new Error(result.error.readableMsg);
97
+ return result.value;
64
98
  },
65
99
  initialPageParam: 0,
66
100
  getNextPageParam(lastPage, _allPages, lastPageParam) {
67
- return lastPage.length === DEFAULT_PAGE_SIZE ? lastPageParam + 1 : void 0;
101
+ return lastPage.hasMore ? lastPageParam + 1 : void 0;
68
102
  },
69
103
  refetchInterval: DEFAULT_REFRESH_INTERVAL,
70
- enabled: !!$subgraphUrl
104
+ enabled: true
71
105
  });
72
- const updateActiveNetworkAndOrderbook = (subgraphName) => {
73
- activeNetworkRef.set(subgraphName);
74
- activeOrderbookRef.set(subgraphName);
106
+ $: if (selectedVaults.size > 0 && !$account) {
107
+ selectedVaults = /* @__PURE__ */ new Set();
108
+ selectedVaultsOnChainId = null;
109
+ }
110
+ let selectedVaults = /* @__PURE__ */ new Set();
111
+ let selectedVaultsOnChainId = null;
112
+ const getToggleSelectVaultHandler = (vaultId, chainId) => (e) => {
113
+ e.stopPropagation();
114
+ if (selectedVaults.has(vaultId)) {
115
+ selectedVaults.delete(vaultId);
116
+ if (selectedVaults.size === 0) {
117
+ selectedVaultsOnChainId = null;
118
+ }
119
+ } else {
120
+ selectedVaults.add(vaultId);
121
+ if (selectedVaultsOnChainId === null) {
122
+ selectedVaultsOnChainId = chainId;
123
+ }
124
+ }
125
+ selectedVaults = new Set(selectedVaults);
126
+ };
127
+ const stopPropagation = (e) => e.stopPropagation();
128
+ const handleWithdrawAll = () => {
129
+ const pages = $query.data?.pages ?? [];
130
+ if (!onWithdrawAll || pages.length === 0) {
131
+ return;
132
+ }
133
+ const selectedIds = Array.from(selectedVaults);
134
+ try {
135
+ const filteredVaultListResults = pages.reduce(
136
+ (prev, cur) => {
137
+ const result = cur.vaults.pickByIds(selectedIds);
138
+ if (result.error) {
139
+ throw new Error(result.error.readableMsg);
140
+ }
141
+ return [...prev, result.value];
142
+ },
143
+ []
144
+ );
145
+ if (filteredVaultListResults.length === 0) {
146
+ errToast("No selected vaults found in the loaded pages. Please refresh and try again.");
147
+ return;
148
+ }
149
+ const [first, ...rest] = filteredVaultListResults;
150
+ const combinedVaultsList = rest.reduce((prev, cur) => {
151
+ const result = prev.concat(cur);
152
+ if (result.error) {
153
+ throw new Error(result.error.readableMsg);
154
+ }
155
+ return result.value;
156
+ }, first);
157
+ return onWithdrawAll(raindexClient, combinedVaultsList);
158
+ } catch (err) {
159
+ if (err instanceof Error) {
160
+ errToast(err.message);
161
+ }
162
+ }
163
+ };
164
+ const ZERO_FLOAT = Float.parse("0").value;
165
+ const isZeroBalance = (item) => {
166
+ if (!ZERO_FLOAT) return true;
167
+ return item.balance.eq(ZERO_FLOAT).value;
168
+ };
169
+ const isSameChainId = (item, chainId) => {
170
+ return chainId === null || chainId === item.chainId;
171
+ };
172
+ const isDisabled = (item, chainId) => {
173
+ return !isSameChainId(item, chainId) || isZeroBalance(item);
75
174
  };
76
- $: isVaultsPage = currentRoute.startsWith("/vaults");
77
- $: isOrdersPage = currentRoute.startsWith("/orders");
78
175
  const AppTable = TanstackAppTable;
79
176
  </script>
80
177
 
81
178
  {#if $query}
82
- <ListViewOrderbookFilters
83
- {activeSubgraphs}
84
- {settings}
85
- {accounts}
86
- {activeAccountsItems}
87
- {showMyItemsOnly}
88
- {activeOrderStatus}
179
+ <ListViewRaindexFilters
180
+ {selectedChainIds}
181
+ {showInactiveOrders}
89
182
  {orderHash}
90
183
  {hideZeroBalanceVaults}
91
- {isVaultsPage}
92
- {isOrdersPage}
93
- {signerAddress}
184
+ {hideInactiveOrdersVaults}
185
+ {activeTokens}
186
+ {tokensQuery}
187
+ {selectedTokens}
188
+ {activeRaindexAddresses}
189
+ {selectedRaindexAddresses}
190
+ {ownerFilter}
94
191
  />
95
192
  <AppTable
96
193
  {query}
97
- queryKey={undefined}
194
+ dataSelector={(page) => page.items}
195
+ queryKey={QKEY_VAULTS}
98
196
  emptyMessage="No Vaults Found"
99
197
  on:clickRow={(e) => {
100
- updateActiveNetworkAndOrderbook(e.detail.item.subgraphName);
101
- goto(`/vaults/${e.detail.item.subgraphName}-${e.detail.item.vault.id}`);
198
+ goto(`/vaults/${e.detail.item.chainId}-${e.detail.item.raindex}-${e.detail.item.id}`);
102
199
  }}
103
200
  >
104
201
  <svelte:fragment slot="title">
105
202
  <div class="mt-2 flex w-full justify-between">
106
203
  <div class="flex items-center gap-x-6">
107
204
  <div class="text-3xl font-medium dark:text-white">Vaults</div>
108
- {#if handleDepositGenericModal}
109
- <Button
110
- disabled={!$activeOrderbook}
111
- size="sm"
112
- color="primary"
113
- data-testid="new-vault-button"
114
- on:click={() => {
115
- handleDepositGenericModal();
116
- }}
117
- >New vault
118
- </Button>
119
- {/if}
205
+ <Button
206
+ size="xs"
207
+ on:click={handleWithdrawAll}
208
+ disabled={!onWithdrawAll || selectedVaults.size === 0}
209
+ data-testid="withdraw-all-button"
210
+ >
211
+ <ArrowUpFromBracketOutline size="xs" class="mr-2" />
212
+ {selectedVaults.size > 0
213
+ ? `Withdraw selected (${selectedVaults.size})`
214
+ : 'Withdraw vaults'}
215
+ </Button>
120
216
  </div>
121
217
  </div>
122
218
  </svelte:fragment>
123
219
  <svelte:fragment slot="head">
124
- <TableHeadCell padding="p-4">Network</TableHeadCell>
125
- <TableHeadCell padding="px-4 py-4">Vault ID</TableHeadCell>
126
- <TableHeadCell padding="px-4 py-4">Orderbook</TableHeadCell>
127
- <TableHeadCell padding="px-4 py-4">Owner</TableHeadCell>
128
- <TableHeadCell padding="px-2 py-4">Token</TableHeadCell>
129
- <TableHeadCell padding="px-2 py-4">Balance</TableHeadCell>
130
- <TableHeadCell padding="px-3 py-4">Input For</TableHeadCell>
131
- <TableHeadCell padding="px-3 py-4">Output For</TableHeadCell>
220
+ <TableHeadCell padding="p-0" class="w-[4%]"><span class="sr-only">Select</span></TableHeadCell
221
+ >
222
+ <TableHeadCell padding="pl-0 py-4" class="w-[8%]">Network</TableHeadCell>
223
+ <TableHeadCell padding="px-4 py-4" class="w-[22%]">Addresses</TableHeadCell>
224
+ <TableHeadCell padding="px-2 py-4" class="w-[22%]">Token</TableHeadCell>
225
+ <TableHeadCell padding="px-3 py-4" class="w-[20%]">Input For</TableHeadCell>
226
+ <TableHeadCell padding="px-3 py-4" class="w-[20%]">Output For</TableHeadCell>
227
+ <TableHeadCell padding="p-0" class="w-[4%]"
228
+ ><span class="sr-only">Actions</span></TableHeadCell
229
+ >
132
230
  </svelte:fragment>
133
231
 
134
232
  <svelte:fragment slot="bodyRow" let:item>
135
- <TableBodyCell tdClass="px-4 py-2" data-testid="vault-network">
136
- {item.subgraphName}
233
+ <TableBodyCell tdClass="px-0" on:click={stopPropagation}>
234
+ <Checkbox
235
+ data-testid="vault-checkbox"
236
+ class={`block px-2 py-4 ${$account?.toLowerCase() !== item.owner.toLowerCase() ? 'invisible' : ''}`}
237
+ checked={selectedVaults.has(item.id)}
238
+ disabled={isDisabled(item, selectedVaultsOnChainId)}
239
+ on:change={getToggleSelectVaultHandler(item.id, item.chainId)}
240
+ on:click={stopPropagation}
241
+ aria-label={`Select vault ${item.id}`}
242
+ />
243
+ {#if $account?.toLowerCase() === item.owner.toLowerCase() && isDisabled(item, selectedVaultsOnChainId)}
244
+ <Tooltip>
245
+ {isZeroBalance(item)
246
+ ? 'This vault has a zero balance'
247
+ : 'This vault is on a different network'}
248
+ </Tooltip>
249
+ {/if}
137
250
  </TableBodyCell>
138
251
 
139
- <TableBodyCell tdClass="break-all px-4 py-4" data-testid="vault-id">
140
- <Hash type={HashType.Identifier} value={bigintStringToHex(item.vault.vaultId)} />
141
- </TableBodyCell>
142
- <TableBodyCell tdClass="break-all px-4 py-2 min-w-48" data-testid="vault-orderbook">
143
- <Hash type={HashType.Identifier} value={item.vault.orderbook.id} />
252
+ <TableBodyCell tdClass="px-4 py-2" data-testid="vault-network">
253
+ {getNetworkName(Number(item.chainId))}
144
254
  </TableBodyCell>
145
- <TableBodyCell tdClass="break-all px-4 py-2 min-w-48" data-testid="vault-owner">
146
- <Hash type={HashType.Wallet} value={item.vault.owner} />
255
+
256
+ <TableBodyCell data-testid="vaultAddresses" tdClass="px-4 py-2">
257
+ <div class="flex flex-col gap-1 text-sm">
258
+ <div class="flex items-center gap-1">
259
+ <span class="text-gray-500 dark:text-gray-400">Vault:</span>
260
+ <Hash type={HashType.Identifier} value={toHex(item.vaultId)} />
261
+ </div>
262
+ <div class="flex items-center gap-1">
263
+ <span class="text-gray-500 dark:text-gray-400">Raindex:</span>
264
+ <Hash type={HashType.Identifier} value={item.raindex} />
265
+ </div>
266
+ <div class="flex items-center gap-1">
267
+ <span class="text-gray-500 dark:text-gray-400">Owner:</span>
268
+ <Hash type={HashType.Wallet} value={item.owner} />
269
+ </div>
270
+ </div>
147
271
  </TableBodyCell>
148
- <TableBodyCell tdClass="break-word p-2 min-w-48" data-testid="vault-token"
149
- >{item.vault.token.name}</TableBodyCell
150
- >
151
- <TableBodyCell tdClass="break-all p-2 min-w-48" data-testid="vault-balance">
152
- {vaultBalanceDisplay(item.vault)}
153
- {item.vault.token.symbol}
272
+ <TableBodyCell tdClass="p-2" data-testid="vault-token">
273
+ <div class="flex flex-col overflow-hidden">
274
+ <span class="truncate font-medium">{item.token.name}</span>
275
+ <span class="max-w-[200px] truncate text-sm text-gray-500 dark:text-gray-400"
276
+ >{item.formattedBalance} {item.token.symbol}</span
277
+ >
278
+ </div>
154
279
  </TableBodyCell>
155
- <TableBodyCell tdClass="break-all p-2 min-w-48">
156
- {#if item.vault.ordersAsInput.length > 0}
280
+ <TableBodyCell tdClass="break-all p-2">
281
+ {#if item.ordersAsInput.length > 0}
157
282
  <div data-testid="vault-order-inputs" class="flex flex-wrap items-end justify-start">
158
- {#each item.vault.ordersAsInput.slice(0, 3) as order}
283
+ {#each item.ordersAsInput.slice(0, 3) as order}
159
284
  <OrderOrVaultHash
160
285
  type="orders"
161
286
  orderOrVault={order}
162
- network={item.subgraphName}
163
- {updateActiveNetworkAndOrderbook}
287
+ chainId={item.chainId}
288
+ raindexAddress={item.raindex}
164
289
  />
165
290
  {/each}
166
- {#if item.vault.ordersAsInput.length > 3}...{/if}
291
+ {#if item.ordersAsInput.length > 3}...{/if}
167
292
  </div>
168
293
  {/if}
169
294
  </TableBodyCell>
170
- <TableBodyCell tdClass="break-all p-2 min-w-48">
171
- {#if item.vault.ordersAsOutput.length > 0}
295
+ <TableBodyCell tdClass="break-all p-2">
296
+ {#if item.ordersAsOutput.length > 0}
172
297
  <div data-testid="vault-order-outputs" class="flex flex-wrap items-end justify-start">
173
- {#each item.vault.ordersAsOutput.slice(0, 3) as order}
298
+ {#each item.ordersAsOutput.slice(0, 3) as order}
174
299
  <OrderOrVaultHash
175
300
  type="orders"
176
301
  orderOrVault={order}
177
- network={item.subgraphName}
178
- {updateActiveNetworkAndOrderbook}
302
+ chainId={item.chainId}
303
+ raindexAddress={item.raindex}
179
304
  />
180
305
  {/each}
181
- {#if item.vault.ordersAsOutput.length > 3}...{/if}
306
+ {#if item.ordersAsOutput.length > 3}...{/if}
182
307
  </div>
183
308
  {/if}
184
309
  </TableBodyCell>
185
- {#if handleDepositModal && handleWithdrawModal && $walletAddressMatchesOrBlank(item.vault.owner)}
186
- <TableBodyCell tdClass="px-0 text-right">
187
- {#if $walletAddressMatchesOrBlank(item.vault.owner)}
188
- <Button
189
- color="alternative"
190
- outline={false}
191
- data-testid="vault-menu"
192
- id={`vault-menu-${item.vault.id}`}
193
- class="mr-2 border-none px-2"
194
- on:click={(e) => {
195
- e.stopPropagation();
196
- }}
197
- >
198
- <DotsVerticalOutline class="dark:text-white" />
199
- </Button>
200
- {/if}
201
- </TableBodyCell>
202
- {#if $walletAddressMatchesOrBlank(item.vault.owner)}
203
- <Dropdown
204
- data-testid="dropdown"
205
- placement="bottom-end"
206
- triggeredBy={`#vault-menu-${item.vault.id}`}
310
+ <TableBodyCell tdClass="px-0 text-right">
311
+ {#if handleDepositModal && handleWithdrawModal && item.owner.toLowerCase() === $account?.toLowerCase()}
312
+ <Button
313
+ color="alternative"
314
+ outline={false}
315
+ data-testid="vault-menu"
316
+ id={`vault-menu-${item.id}`}
317
+ class="mr-2 border-none px-2"
318
+ title="Vault actions"
319
+ aria-label="Vault actions"
320
+ on:click={(e) => {
321
+ e.stopPropagation();
322
+ }}
207
323
  >
208
- <DropdownItem
209
- data-testid="deposit-button"
210
- on:click={(e) => {
211
- e.stopPropagation();
212
- handleDepositModal(item.vault, $query.refetch);
213
- }}
214
- >Deposit
215
- </DropdownItem>
216
- <DropdownItem
217
- data-testid="withdraw-button"
218
- on:click={(e) => {
219
- e.stopPropagation();
220
- handleWithdrawModal(item.vault, $query.refetch);
221
- }}
222
- >Withdraw
223
- </DropdownItem>
224
- </Dropdown>
324
+ <DotsVerticalOutline class="dark:text-white" />
325
+ </Button>
225
326
  {/if}
327
+ </TableBodyCell>
328
+ {#if handleDepositModal && handleWithdrawModal && item.owner.toLowerCase() === $account?.toLowerCase()}
329
+ <Dropdown
330
+ data-testid="dropdown"
331
+ placement="bottom-end"
332
+ triggeredBy={`#vault-menu-${item.id}`}
333
+ >
334
+ <DropdownItem
335
+ data-testid="deposit-button"
336
+ on:click={(e) => {
337
+ e.stopPropagation();
338
+ handleDepositModal(item, $query.refetch, context);
339
+ }}
340
+ >Deposit
341
+ </DropdownItem>
342
+ <DropdownItem
343
+ data-testid="withdraw-button"
344
+ on:click={(e) => {
345
+ e.stopPropagation();
346
+ handleWithdrawModal(item, $query.refetch, context);
347
+ }}
348
+ >Withdraw
349
+ </DropdownItem>
350
+ </Dropdown>
226
351
  {/if}
227
352
  </svelte:fragment>
228
353
  </AppTable>
@@ -1,40 +1,31 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import { type ConfigSource, type OrderbookConfigSource } from '@rainlanguage/orderbook/js_api';
3
- import { type SgVault } from '@rainlanguage/orderbook/js_api';
4
- import { type Writable, type Readable } from 'svelte/store';
2
+ import { RaindexClient, RaindexVault, RaindexVaultsList } from '@rainlanguage/raindex';
5
3
  import type { AppStoresInterface } from '../../types/appStores.ts';
6
- declare class __sveltets_Render<T> {
7
- props(): {
8
- activeOrderbook: Readable<OrderbookConfigSource | undefined>;
9
- subgraphUrl: Readable<string | undefined>;
10
- accounts: AppStoresInterface["accounts"] | undefined;
11
- activeAccountsItems: AppStoresInterface["activeAccountsItems"] | undefined;
12
- orderHash: Writable<string>;
13
- activeSubgraphs: Writable<Record<string, string>>;
14
- settings: Writable<ConfigSource | undefined>;
15
- activeOrderStatus: Writable<boolean | undefined>;
16
- hideZeroBalanceVaults: Writable<boolean>;
17
- activeNetworkRef: Writable<string | undefined>;
18
- activeOrderbookRef: Writable<string | undefined>;
19
- activeAccounts: Readable<{
20
- [k: string]: string;
21
- }>;
22
- walletAddressMatchesOrBlank: Readable<(otherAddress: string) => boolean>;
23
- handleDepositGenericModal?: (() => void) | undefined;
24
- handleDepositModal?: ((vault: SgVault, refetch: () => void) => void) | undefined;
25
- handleWithdrawModal?: ((vault: SgVault, refetch: () => void) => void) | undefined;
26
- currentRoute: string;
27
- showMyItemsOnly: AppStoresInterface["showMyItemsOnly"];
28
- signerAddress: Writable<string | null> | undefined;
4
+ import { getAllContexts } from 'svelte';
5
+ declare const __propDef: {
6
+ props: {
7
+ orderHash: AppStoresInterface["orderHash"];
8
+ showInactiveOrders: AppStoresInterface["showInactiveOrders"];
9
+ hideZeroBalanceVaults: AppStoresInterface["hideZeroBalanceVaults"];
10
+ hideInactiveOrdersVaults: AppStoresInterface["hideInactiveOrdersVaults"];
11
+ activeTokens: AppStoresInterface["activeTokens"];
12
+ selectedChainIds: AppStoresInterface["selectedChainIds"];
13
+ activeRaindexAddresses: AppStoresInterface["activeRaindexAddresses"];
14
+ ownerFilter: AppStoresInterface["ownerFilter"];
15
+ handleDepositModal?: ((vault: RaindexVault, refetch: () => void, context: ReturnType<typeof getAllContexts>) => void) | undefined;
16
+ handleWithdrawModal?: ((vault: RaindexVault, refetch: () => void, context: ReturnType<typeof getAllContexts>) => void) | undefined;
17
+ onWithdrawAll?: ((raindexClient: RaindexClient, vaultsList: RaindexVaultsList) => void | Promise<void>) | undefined;
29
18
  };
30
- events(): {} & {
19
+ events: {
31
20
  [evt: string]: CustomEvent<any>;
32
21
  };
33
- slots(): {};
34
- }
35
- export type VaultsListTableProps<T> = ReturnType<__sveltets_Render<T>['props']>;
36
- export type VaultsListTableEvents<T> = ReturnType<__sveltets_Render<T>['events']>;
37
- export type VaultsListTableSlots<T> = ReturnType<__sveltets_Render<T>['slots']>;
38
- export default class VaultsListTable<T> extends SvelteComponent<VaultsListTableProps<T>, VaultsListTableEvents<T>, VaultsListTableSlots<T>> {
22
+ slots: {};
23
+ exports?: {} | undefined;
24
+ bindings?: string | undefined;
25
+ };
26
+ export type VaultsListTableProps = typeof __propDef.props;
27
+ export type VaultsListTableEvents = typeof __propDef.events;
28
+ export type VaultsListTableSlots = typeof __propDef.slots;
29
+ export default class VaultsListTable extends SvelteComponent<VaultsListTableProps, VaultsListTableEvents, VaultsListTableSlots> {
39
30
  }
40
31
  export {};
@@ -0,0 +1,64 @@
1
+ <script>import { useTransactions } from "../../providers/transactions/useTransactions";
2
+ import { CloseOutline } from "flowbite-svelte-icons";
3
+ import { writable } from "svelte/store";
4
+ import { getStatusEmoji } from "./getStatusEmoji";
5
+ const { transactions } = useTransactions();
6
+ const isDismissed = writable(false);
7
+ $: latestTransaction = $transactions.length > 0 ? $transactions[$transactions.length - 1].state : null;
8
+ $: if (latestTransaction) {
9
+ isDismissed.set(false);
10
+ }
11
+ function dismissTransaction() {
12
+ isDismissed.set(true);
13
+ }
14
+ </script>
15
+
16
+ {#if $latestTransaction && !$isDismissed}
17
+ <div
18
+ class="fixed bottom-0 left-0 right-0 z-40 border-t border-gray-200 bg-white lg:hidden dark:border-gray-700 dark:bg-gray-900"
19
+ >
20
+ <div class="flex items-start gap-3 p-3">
21
+ <!-- Transaction details -->
22
+ <div class="min-w-0 flex-1">
23
+ <div class="mb-1 flex items-center gap-2">
24
+ <span class="text-lg">{getStatusEmoji($latestTransaction.status)}</span>
25
+ <p class="truncate text-sm font-semibold text-gray-600 dark:text-gray-400">
26
+ {$latestTransaction.name}
27
+ </p>
28
+ </div>
29
+ <p class="truncate text-xs text-gray-600 dark:text-gray-400">
30
+ {$latestTransaction.status}
31
+ </p>
32
+ {#if $latestTransaction.errorDetails}
33
+ <p class="truncate text-xs text-red-600 dark:text-red-400">
34
+ {$latestTransaction.errorDetails}
35
+ </p>
36
+ {/if}
37
+ {#if $latestTransaction.links.length > 0}
38
+ <div class="mt-1 flex gap-2">
39
+ {#each $latestTransaction.links.slice(0, 2) as link}
40
+ <a
41
+ href={link.link}
42
+ target="_blank"
43
+ rel="noopener noreferrer"
44
+ class="truncate text-xs text-blue-500 hover:underline"
45
+ >
46
+ {link.label}
47
+ </a>
48
+ {/each}
49
+ </div>
50
+ {/if}
51
+ </div>
52
+
53
+ <!-- Close button -->
54
+ <button
55
+ on:click={dismissTransaction}
56
+ class="flex-shrink-0 p-1 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"
57
+ title="Dismiss transaction"
58
+ aria-label="Dismiss transaction"
59
+ >
60
+ <CloseOutline class="h-4 w-4" />
61
+ </button>
62
+ </div>
63
+ </div>
64
+ {/if}
@@ -0,0 +1,16 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: Record<string, never>;
4
+ events: {
5
+ [evt: string]: CustomEvent<any>;
6
+ };
7
+ slots: {};
8
+ exports?: {} | undefined;
9
+ bindings?: string | undefined;
10
+ };
11
+ export type FixedBottomTransactionProps = typeof __propDef.props;
12
+ export type FixedBottomTransactionEvents = typeof __propDef.events;
13
+ export type FixedBottomTransactionSlots = typeof __propDef.slots;
14
+ export default class FixedBottomTransaction extends SvelteComponent<FixedBottomTransactionProps, FixedBottomTransactionEvents, FixedBottomTransactionSlots> {
15
+ }
16
+ export {};