@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,73 +1,283 @@
1
- <script generics="T">import { invalidateIdQuery } from "../queries/queryClient";
1
+ <script generics="DataItem, InputData = DataItem[]">import { invalidateTanstackQueries } from "../queries/queryClient";
2
2
  import Refresh from "./icon/Refresh.svelte";
3
- import { Button, Table, TableBody, TableBodyRow, TableHead } from "flowbite-svelte";
4
- import { createEventDispatcher } from "svelte";
3
+ import {
4
+ Button,
5
+ Table,
6
+ TableBody,
7
+ TableBodyRow,
8
+ TableHead
9
+ } from "flowbite-svelte";
10
+ import {
11
+ afterUpdate,
12
+ createEventDispatcher,
13
+ onDestroy,
14
+ onMount
15
+ } from "svelte";
5
16
  import { useQueryClient } from "@tanstack/svelte-query";
17
+ import {
18
+ createWindowVirtualizer
19
+ } from "@tanstack/svelte-virtual";
6
20
  const queryClient = useQueryClient();
7
21
  const dispatch = createEventDispatcher();
8
22
  export let queryKey;
9
23
  export let query;
10
24
  export let emptyMessage = "None found";
11
25
  export let rowHoverable = true;
26
+ export let dataSelector = (pageData) => Array.isArray(pageData) ? pageData : [];
27
+ export let virtualization = {};
28
+ $: enableVirtualization = virtualization.enabled ?? true;
29
+ $: estimatedRowHeight = virtualization.estimatedRowHeight ?? 56;
30
+ $: virtualizationOverscan = virtualization.overscan ?? 8;
31
+ let measuredRowHeight = null;
32
+ $: rowHeight = measuredRowHeight ?? estimatedRowHeight;
33
+ let transformedPages = [];
34
+ let lastPagesRef;
35
+ let lastSelector = dataSelector;
36
+ $: {
37
+ const currentData = $query.data;
38
+ const currentPages = currentData?.pages;
39
+ const selectorChanged = lastSelector !== dataSelector;
40
+ if (!currentPages) {
41
+ transformedPages = [];
42
+ lastPagesRef = void 0;
43
+ lastSelector = dataSelector;
44
+ } else if (currentPages !== lastPagesRef || selectorChanged) {
45
+ transformedPages = currentPages.map((page) => dataSelector(page));
46
+ lastPagesRef = currentPages;
47
+ lastSelector = dataSelector;
48
+ }
49
+ }
50
+ $: flattenedRows = transformedPages.flat();
51
+ $: totalRows = flattenedRows.length;
52
+ $: hasData = totalRows > 0;
53
+ $: isInitialLoading = totalRows === 0 && ($query.isLoading || $query.isFetching);
54
+ const hasWindow = typeof window !== "undefined";
55
+ let tableContainerElement = null;
56
+ let tableOffsetTop = 0;
57
+ let virtualizerStore = null;
58
+ let virtualizer = null;
59
+ let unsubscribeVirtualizer = null;
60
+ let virtualizationActive = false;
61
+ function updateTableOffset() {
62
+ if (!enableVirtualization || !hasWindow || !tableContainerElement) {
63
+ tableOffsetTop = 0;
64
+ return;
65
+ }
66
+ const rect = tableContainerElement.getBoundingClientRect();
67
+ tableOffsetTop = rect.top + window.scrollY;
68
+ }
69
+ onMount(() => {
70
+ if (!hasWindow) {
71
+ return;
72
+ }
73
+ virtualizerStore = createWindowVirtualizer({
74
+ count: totalRows,
75
+ estimateSize: () => rowHeight,
76
+ overscan: virtualizationOverscan,
77
+ scrollMargin: tableOffsetTop,
78
+ getItemKey: (index) => index,
79
+ enabled: enableVirtualization && totalRows > 0
80
+ });
81
+ unsubscribeVirtualizer = virtualizerStore.subscribe((instance) => {
82
+ virtualizer = instance;
83
+ });
84
+ updateTableOffset();
85
+ return () => {
86
+ unsubscribeVirtualizer?.();
87
+ };
88
+ });
89
+ afterUpdate(() => {
90
+ if (enableVirtualization) {
91
+ updateTableOffset();
92
+ }
93
+ });
94
+ $: if (virtualizer) {
95
+ virtualizer.setOptions({
96
+ count: totalRows,
97
+ estimateSize: () => rowHeight,
98
+ overscan: virtualizationOverscan,
99
+ scrollMargin: tableOffsetTop,
100
+ getItemKey: (index) => index,
101
+ enabled: enableVirtualization && totalRows > 0
102
+ });
103
+ }
104
+ $: virtualizationActive = enableVirtualization && Boolean(virtualizer);
105
+ let virtualItems = [];
106
+ let totalSize = 0;
107
+ let topPadding = 0;
108
+ let bottomPadding = 0;
109
+ let scrollMargin = 0;
110
+ $: {
111
+ const hasRows = totalRows > 0;
112
+ scrollMargin = virtualizationActive ? tableOffsetTop : 0;
113
+ if (virtualizationActive && virtualizer && hasRows) {
114
+ virtualItems = virtualizer.getVirtualItems();
115
+ totalSize = virtualizer.getTotalSize();
116
+ const firstItem = virtualItems[0];
117
+ const lastItem = virtualItems[virtualItems.length - 1];
118
+ topPadding = firstItem ? Math.max(0, firstItem.start - scrollMargin) : 0;
119
+ bottomPadding = lastItem ? Math.max(0, totalSize - (lastItem.end - scrollMargin)) : Math.max(0, totalSize);
120
+ } else {
121
+ virtualItems = [];
122
+ totalSize = 0;
123
+ topPadding = 0;
124
+ bottomPadding = 0;
125
+ }
126
+ }
127
+ onDestroy(() => {
128
+ unsubscribeVirtualizer?.();
129
+ });
130
+ afterUpdate(() => {
131
+ if (!virtualizationActive || !virtualizer || !tableContainerElement) {
132
+ return;
133
+ }
134
+ const rows = Array.from(
135
+ tableContainerElement.querySelectorAll(
136
+ 'tbody tr[data-virtual-row="true"]'
137
+ )
138
+ );
139
+ if (!rows.length) {
140
+ return;
141
+ }
142
+ for (const row of rows) {
143
+ virtualizer.measureElement(row);
144
+ }
145
+ if (measuredRowHeight === null) {
146
+ const sampleHeight = rows[0].getBoundingClientRect().height;
147
+ if (sampleHeight > 0) {
148
+ measuredRowHeight = sampleHeight;
149
+ }
150
+ }
151
+ });
12
152
  </script>
13
153
 
14
154
  <div data-testid="title" class="flex h-16 w-full items-center justify-end">
15
- <slot name="info" />
16
- <slot name="timeFilter" />
17
- <slot name="title" />
18
- <Refresh
19
- class="ml-2 h-8 w-5 cursor-pointer text-gray-400 dark:text-gray-400"
20
- data-testid="refreshButton"
21
- spin={$query.isLoading || $query.isFetching}
22
- on:click={async () => {
23
- if (queryKey) {
24
- await invalidateIdQuery(queryClient, queryKey);
25
- }
26
- $query.refetch();
27
- }}
28
- />
155
+ <slot name="info" />
156
+ <slot name="timeFilter" />
157
+ <slot name="title" />
158
+ <Refresh
159
+ class="ml-2 h-8 w-5 cursor-pointer text-gray-400 dark:text-gray-400"
160
+ data-testid="refreshButton"
161
+ title="Refresh"
162
+ ariaLabel="Refresh"
163
+ spin={$query.isLoading || $query.isFetching}
164
+ on:click={async () => {
165
+ if (queryKey) {
166
+ invalidateTanstackQueries(queryClient, [queryKey]);
167
+ }
168
+ }}
169
+ />
29
170
  </div>
30
- {#if $query.data?.pages[0].length === 0}
31
- <div data-testid="emptyMessage" class="text-center text-gray-900 dark:text-white">
32
- {emptyMessage}
33
- </div>
34
- {:else if $query.data}
35
- <Table
36
- divClass="cursor-pointer rounded-lg overflow-auto dark:border-none border"
37
- hoverable={rowHoverable}
38
- >
39
- <TableHead data-testid="head">
40
- <slot name="head" />
41
- </TableHead>
42
- <TableBody>
43
- {#each $query.data?.pages as page}
44
- {#each page as item}
45
- <TableBodyRow
46
- class="whitespace-nowrap"
47
- data-testid="bodyRow"
48
- on:click={() => {
49
- dispatch('clickRow', { item });
50
- }}
51
- >
52
- <slot name="bodyRow" {item} />
53
- </TableBodyRow>
54
- {/each}
55
- {/each}
56
- </TableBody>
57
- </Table>
58
- <div class="mt-2 flex justify-center">
59
- <Button
60
- data-testid="loadMoreButton"
61
- size="xs"
62
- color="dark"
63
- on:click={() => $query.fetchNextPage()}
64
- disabled={!$query.hasNextPage || $query.isFetchingNextPage}
65
- >
66
- {#if $query.isFetchingNextPage}
67
- Loading more...
68
- {:else if $query.hasNextPage}
69
- Load More
70
- {:else}Nothing more to load{/if}
71
- </Button>
72
- </div>
171
+ {#if isInitialLoading}
172
+ <div
173
+ data-testid="tableLoadingSkeleton"
174
+ class="animate-pulse overflow-hidden rounded-lg border dark:border-gray-700"
175
+ >
176
+ <div
177
+ class="grid grid-cols-5 gap-4 border-b bg-gray-50 p-4 dark:border-gray-700 dark:bg-gray-800"
178
+ >
179
+ {#each [0, 1, 2, 3, 4] as columnIndex (columnIndex)}
180
+ <div class="h-3 rounded bg-gray-200 dark:bg-gray-700" />
181
+ {/each}
182
+ </div>
183
+ {#each [0, 1, 2, 3, 4, 5, 6, 7] as rowIndex (rowIndex)}
184
+ <div
185
+ class="grid grid-cols-5 gap-4 border-b p-4 last:border-b-0 dark:border-gray-700"
186
+ >
187
+ <div class="h-4 rounded bg-gray-200 dark:bg-gray-700" />
188
+ <div class="h-4 rounded bg-gray-200 dark:bg-gray-700" />
189
+ <div class="h-4 rounded bg-gray-200 dark:bg-gray-700" />
190
+ <div class="h-4 rounded bg-gray-200 dark:bg-gray-700" />
191
+ <div class="h-4 rounded bg-gray-200 dark:bg-gray-700" />
192
+ </div>
193
+ {/each}
194
+ </div>
195
+ {:else if totalRows === 0}
196
+ <div
197
+ data-testid="emptyMessage"
198
+ class="text-center text-gray-900 dark:text-white"
199
+ >
200
+ {emptyMessage}
201
+ </div>
202
+ {:else if hasData}
203
+ <div
204
+ class="cursor-pointer overflow-x-auto rounded-lg border dark:border-none"
205
+ data-testid="tanstackTableContainer"
206
+ bind:this={tableContainerElement}
207
+ >
208
+ <Table
209
+ divClass="min-w-full"
210
+ class="w-full table-fixed"
211
+ hoverable={rowHoverable}
212
+ >
213
+ <TableHead data-testid="head">
214
+ <slot name="head" />
215
+ </TableHead>
216
+ <TableBody>
217
+ {#if virtualizationActive && topPadding > 0}
218
+ <tr aria-hidden="true">
219
+ <td
220
+ colspan="1000"
221
+ class="border-0 p-0"
222
+ style={`height:${topPadding}px;`}
223
+ />
224
+ </tr>
225
+ {/if}
226
+ {#if virtualizationActive}
227
+ {#each virtualItems as virtualItem (virtualItem.key)}
228
+ <TableBodyRow
229
+ class="whitespace-nowrap"
230
+ data-testid="bodyRow"
231
+ data-virtual-row="true"
232
+ on:click={() => {
233
+ dispatch("clickRow", {
234
+ item: flattenedRows[virtualItem.index],
235
+ });
236
+ }}
237
+ >
238
+ <slot name="bodyRow" item={flattenedRows[virtualItem.index]} />
239
+ </TableBodyRow>
240
+ {/each}
241
+ {:else}
242
+ {#each transformedPages as page}
243
+ {#each page as item}
244
+ <TableBodyRow
245
+ class="whitespace-nowrap"
246
+ data-testid="bodyRow"
247
+ on:click={() => {
248
+ dispatch("clickRow", { item });
249
+ }}
250
+ >
251
+ <slot name="bodyRow" {item} />
252
+ </TableBodyRow>
253
+ {/each}
254
+ {/each}
255
+ {/if}
256
+ {#if virtualizationActive && bottomPadding > 0}
257
+ <tr aria-hidden="true">
258
+ <td
259
+ colspan="1000"
260
+ class="border-0 p-0"
261
+ style={`height:${bottomPadding}px;`}
262
+ />
263
+ </tr>
264
+ {/if}
265
+ </TableBody>
266
+ </Table>
267
+ </div>
268
+ <div class="mt-2 flex justify-center">
269
+ <Button
270
+ data-testid="loadMoreButton"
271
+ size="xs"
272
+ color="dark"
273
+ on:click={() => $query.fetchNextPage()}
274
+ disabled={!$query.hasNextPage || $query.isFetchingNextPage}
275
+ >
276
+ {#if $query.isFetchingNextPage}
277
+ Loading more...
278
+ {:else if $query.hasNextPage}
279
+ Load More
280
+ {:else}Nothing more to load{/if}
281
+ </Button>
282
+ </div>
73
283
  {/if}
@@ -1,11 +1,17 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { CreateInfiniteQueryResult, InfiniteData } from '@tanstack/svelte-query';
3
- declare class __sveltets_Render<T> {
2
+ import type { CreateInfiniteQueryResult, InfiniteData } from "@tanstack/svelte-query";
3
+ declare class __sveltets_Render<DataItem, InputData = DataItem[]> {
4
4
  props(): {
5
- queryKey: string | undefined;
6
- query: CreateInfiniteQueryResult<InfiniteData<T[], unknown>, Error>;
5
+ queryKey: string;
6
+ query: CreateInfiniteQueryResult<InfiniteData<InputData, unknown>, Error>;
7
7
  emptyMessage?: string;
8
8
  rowHoverable?: boolean;
9
+ dataSelector?: ((pageData: InputData) => DataItem[]) | undefined;
10
+ virtualization?: {
11
+ enabled?: boolean;
12
+ estimatedRowHeight?: number;
13
+ overscan?: number;
14
+ } | undefined;
9
15
  };
10
16
  events(): {
11
17
  clickRow: CustomEvent<any>;
@@ -18,13 +24,13 @@ declare class __sveltets_Render<T> {
18
24
  title: {};
19
25
  head: {};
20
26
  bodyRow: {
21
- item: T;
27
+ item: DataItem;
22
28
  };
23
29
  };
24
30
  }
25
- export type TanstackAppTableProps<T> = ReturnType<__sveltets_Render<T>['props']>;
26
- export type TanstackAppTableEvents<T> = ReturnType<__sveltets_Render<T>['events']>;
27
- export type TanstackAppTableSlots<T> = ReturnType<__sveltets_Render<T>['slots']>;
28
- export default class TanstackAppTable<T> extends SvelteComponent<TanstackAppTableProps<T>, TanstackAppTableEvents<T>, TanstackAppTableSlots<T>> {
31
+ export type TanstackAppTableProps<DataItem, InputData = DataItem[]> = ReturnType<__sveltets_Render<DataItem, InputData>['props']>;
32
+ export type TanstackAppTableEvents<DataItem, InputData = DataItem[]> = ReturnType<__sveltets_Render<DataItem, InputData>['events']>;
33
+ export type TanstackAppTableSlots<DataItem, InputData = DataItem[]> = ReturnType<__sveltets_Render<DataItem, InputData>['slots']>;
34
+ export default class TanstackAppTable<DataItem, InputData = DataItem[]> extends SvelteComponent<TanstackAppTableProps<DataItem, InputData>, TanstackAppTableEvents<DataItem, InputData>, TanstackAppTableSlots<DataItem, InputData>> {
29
35
  }
30
36
  export {};
@@ -0,0 +1,42 @@
1
+ <script>import { Toast } from "flowbite-svelte";
2
+ import { slide } from "svelte/transition";
3
+ import { CheckCircleSolid, CloseCircleSolid } from "flowbite-svelte-icons";
4
+ import { useToasts } from "../providers/toasts/useToasts";
5
+ export let toast;
6
+ export let i;
7
+ const { removeToast } = useToasts();
8
+ </script>
9
+
10
+ <Toast
11
+ on:close={() => removeToast(i)}
12
+ dismissable={true}
13
+ transition={slide}
14
+ color={toast.color}
15
+ class="mb-2"
16
+ >
17
+ <svelte:fragment slot="icon">
18
+ {#if toast.type === 'success'}
19
+ <CheckCircleSolid class="h-5 w-5" data-testid="success-icon" />
20
+ {:else if toast.type === 'error'}
21
+ <CloseCircleSolid class="h-5 w-5" data-testid="error-icon" />
22
+ {/if}
23
+ </svelte:fragment>
24
+ <p class="font-semibold">{toast.message}</p>
25
+ {#if toast.detail}
26
+ <p>{toast.detail}</p>
27
+ {/if}
28
+ {#if toast.links}
29
+ <div class="flex flex-col">
30
+ {#each toast.links as { link, label }}
31
+ <a
32
+ href={link}
33
+ target="_blank"
34
+ rel="noopener noreferrer"
35
+ class="text-blue-500 hover:underline"
36
+ >
37
+ {label}
38
+ </a>
39
+ {/each}
40
+ </div>
41
+ {/if}
42
+ </Toast>
@@ -0,0 +1,20 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { ToastProps } from '../types/toast';
3
+ declare const __propDef: {
4
+ props: {
5
+ toast: ToastProps;
6
+ i: number;
7
+ };
8
+ events: {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {};
12
+ exports?: {} | undefined;
13
+ bindings?: string | undefined;
14
+ };
15
+ export type ToastDetailProps = typeof __propDef.props;
16
+ export type ToastDetailEvents = typeof __propDef.events;
17
+ export type ToastDetailSlots = typeof __propDef.slots;
18
+ export default class ToastDetail extends SvelteComponent<ToastDetailProps, ToastDetailEvents, ToastDetailSlots> {
19
+ }
20
+ export {};
@@ -0,0 +1,8 @@
1
+ <script>import { Tooltip } from "flowbite-svelte";
2
+ export let triggeredBy = "";
3
+ export let customClass = "";
4
+ </script>
5
+
6
+ <Tooltip {triggeredBy} class={`z-[99] shadow-none ${customClass}`}>
7
+ <slot />
8
+ </Tooltip>
@@ -0,0 +1,21 @@
1
+ import { SvelteComponent } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ triggeredBy?: string;
5
+ customClass?: string;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {
11
+ default: {};
12
+ };
13
+ exports?: {} | undefined;
14
+ bindings?: string | undefined;
15
+ };
16
+ export type TooltipProps = typeof __propDef.props;
17
+ export type TooltipEvents = typeof __propDef.events;
18
+ export type TooltipSlots = typeof __propDef.slots;
19
+ export default class Tooltip extends SvelteComponent<TooltipProps, TooltipEvents, TooltipSlots> {
20
+ }
21
+ export {};
@@ -0,0 +1,23 @@
1
+ <script>import {} from "@rainlanguage/raindex";
2
+ import DropdownCheckbox from "./dropdown/DropdownCheckbox.svelte";
3
+ import { VAULT_BALANCE_CHANGE_FILTER_LABELS } from "../utils/vaultBalanceChangeLabels";
4
+ export let value = void 0;
5
+ const filterOptions = VAULT_BALANCE_CHANGE_FILTER_LABELS;
6
+ let typeFilter = {};
7
+ $: {
8
+ const keys = Object.keys(typeFilter);
9
+ if (keys.length > 0 && keys.length < Object.keys(filterOptions).length) {
10
+ value = keys.sort();
11
+ } else {
12
+ value = void 0;
13
+ }
14
+ }
15
+ </script>
16
+
17
+ <DropdownCheckbox
18
+ options={filterOptions}
19
+ bind:value={typeFilter}
20
+ label="Change Type"
21
+ allLabel="All types"
22
+ onlyTitle={true}
23
+ />
@@ -0,0 +1,19 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import { type VaultBalanceChangeFilter } from '@rainlanguage/raindex';
3
+ declare const __propDef: {
4
+ props: {
5
+ value?: VaultBalanceChangeFilter[] | undefined;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ exports?: {} | undefined;
12
+ bindings?: string | undefined;
13
+ };
14
+ export type VaultBalanceChangeTypeFilterProps = typeof __propDef.props;
15
+ export type VaultBalanceChangeTypeFilterEvents = typeof __propDef.events;
16
+ export type VaultBalanceChangeTypeFilterSlots = typeof __propDef.slots;
17
+ export default class VaultBalanceChangeTypeFilter extends SvelteComponent<VaultBalanceChangeTypeFilterProps, VaultBalanceChangeTypeFilterEvents, VaultBalanceChangeTypeFilterSlots> {
18
+ }
19
+ export {};
@@ -0,0 +1,18 @@
1
+ <script>import { goto } from "$app/navigation";
2
+ export let vault;
3
+ const handleClick = (event) => {
4
+ event.stopPropagation();
5
+ event.preventDefault();
6
+ goto(`/vaults/${vault.chainId}-${vault.raindex}-${vault.id}`);
7
+ };
8
+ </script>
9
+
10
+ <button
11
+ type="button"
12
+ class="flex flex-col rounded-xl border border-gray-200 bg-gray-50 px-4 py-3 text-left shadow-sm transition-colors hover:bg-gray-100 dark:border-gray-600 dark:bg-gray-700 dark:hover:bg-gray-600"
13
+ on:click={handleClick}
14
+ data-testid="vault-card"
15
+ >
16
+ <span class="font-semibold text-gray-800 dark:text-gray-200">{vault.token.symbol}</span>
17
+ <span class="truncate text-xs text-gray-500 dark:text-gray-400">{vault.formattedBalance}</span>
18
+ </button>
@@ -0,0 +1,19 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { RaindexVault } from '@rainlanguage/raindex';
3
+ declare const __propDef: {
4
+ props: {
5
+ vault: RaindexVault;
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ exports?: {} | undefined;
12
+ bindings?: string | undefined;
13
+ };
14
+ export type VaultCardProps = typeof __propDef.props;
15
+ export type VaultCardEvents = typeof __propDef.events;
16
+ export type VaultCardSlots = typeof __propDef.slots;
17
+ export default class VaultCard extends SvelteComponent<VaultCardProps, VaultCardEvents, VaultCardSlots> {
18
+ }
19
+ export {};
@@ -1,4 +1,4 @@
1
- <script generics="T extends keyof SeriesOptionsMap, D, O">import { Spinner } from "flowbite-svelte";
1
+ <script generics="T extends keyof SeriesOptionsMap, O">import { Spinner } from "flowbite-svelte";
2
2
  import {
3
3
  createChart
4
4
  } from "lightweight-charts";
@@ -1,7 +1,7 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import type { Readable } from 'svelte/store';
3
3
  import { type IChartApi, type UTCTimestamp, type ISeriesApi, type WhitespaceData, type Time, type DeepPartial, type SeriesOptionsCommon, type SeriesOptionsMap } from 'lightweight-charts';
4
- declare class __sveltets_Render<T extends keyof SeriesOptionsMap, D, O> {
4
+ declare class __sveltets_Render<T extends keyof SeriesOptionsMap, O> {
5
5
  props(): {
6
6
  [x: string]: any;
7
7
  data?: {
@@ -21,9 +21,9 @@ declare class __sveltets_Render<T extends keyof SeriesOptionsMap, D, O> {
21
21
  };
22
22
  slots(): {};
23
23
  }
24
- export type LightweightChartProps<T extends keyof SeriesOptionsMap, D, O> = ReturnType<__sveltets_Render<T, D, O>['props']>;
25
- export type LightweightChartEvents<T extends keyof SeriesOptionsMap, D, O> = ReturnType<__sveltets_Render<T, D, O>['events']>;
26
- export type LightweightChartSlots<T extends keyof SeriesOptionsMap, D, O> = ReturnType<__sveltets_Render<T, D, O>['slots']>;
27
- export default class LightweightChart<T extends keyof SeriesOptionsMap, D, O> extends SvelteComponent<LightweightChartProps<T, D, O>, LightweightChartEvents<T, D, O>, LightweightChartSlots<T, D, O>> {
24
+ export type LightweightChartProps<T extends keyof SeriesOptionsMap, O> = ReturnType<__sveltets_Render<T, O>['props']>;
25
+ export type LightweightChartEvents<T extends keyof SeriesOptionsMap, O> = ReturnType<__sveltets_Render<T, O>['events']>;
26
+ export type LightweightChartSlots<T extends keyof SeriesOptionsMap, O> = ReturnType<__sveltets_Render<T, O>['slots']>;
27
+ export default class LightweightChart<T extends keyof SeriesOptionsMap, O> extends SvelteComponent<LightweightChartProps<T, O>, LightweightChartEvents<T, O>, LightweightChartSlots<T, O>> {
28
28
  }
29
29
  export {};