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

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,36 +1,327 @@
1
- <script>import { getOrderTradesList } from "@rainlanguage/orderbook/js_api";
2
- import { prepareHistoricalOrderChartData } from "../../services/historicalOrderCharts";
3
- import TanstackLightweightChartLine from "./TanstackLightweightChartLine.svelte";
1
+ <script>import {} from "@rainlanguage/raindex";
4
2
  import { createQuery } from "@tanstack/svelte-query";
5
3
  import { QKEY_ORDER_TRADES_LIST } from "../../queries/keys";
6
- export let id;
7
- export let subgraphUrl;
8
- export let colorTheme;
4
+ import {
5
+ CHART_COLORS,
6
+ extractPairsFromTrades,
7
+ findPairIndex,
8
+ flipTradingPair,
9
+ formatChartTimestamp,
10
+ getDefaultPair,
11
+ getTokenLabel,
12
+ transformPairTrades
13
+ } from "../../services/pairTradesChartData";
14
+ import {
15
+ TIME_DELTA_24_HOURS,
16
+ TIME_DELTA_7_DAYS,
17
+ TIME_DELTA_30_DAYS,
18
+ TIME_DELTA_1_YEAR
19
+ } from "../../services/time";
20
+ import {
21
+ Button,
22
+ ButtonGroup,
23
+ Dropdown,
24
+ DropdownItem,
25
+ Spinner
26
+ } from "flowbite-svelte";
27
+ import { ChevronDownSolid } from "flowbite-svelte-icons";
28
+ import {
29
+ createChart,
30
+ CrosshairMode
31
+ } from "lightweight-charts";
32
+ import { onDestroy, onMount } from "svelte";
33
+ export let order;
9
34
  export let lightweightChartsTheme;
35
+ let chartElement = void 0;
36
+ let chart;
37
+ let priceSeries;
38
+ let buyVolumeSeries;
39
+ let sellVolumeSeries;
40
+ const TIME_OPTIONS = [
41
+ { delta: TIME_DELTA_1_YEAR, label: "1Y" },
42
+ { delta: TIME_DELTA_30_DAYS, label: "30D" },
43
+ { delta: TIME_DELTA_7_DAYS, label: "7D" },
44
+ { delta: TIME_DELTA_24_HOURS, label: "24H" }
45
+ ];
46
+ let timeDelta = TIME_DELTA_1_YEAR;
47
+ let pairs = [];
48
+ let selectedPairIndex = 0;
49
+ let dropdownOpen = false;
50
+ $: selectedPair = pairs[selectedPairIndex] ?? null;
10
51
  $: query = createQuery({
11
- queryKey: [QKEY_ORDER_TRADES_LIST, id],
52
+ queryKey: [QKEY_ORDER_TRADES_LIST, order.id],
12
53
  queryFn: async () => {
13
- const data = await getOrderTradesList(
14
- subgraphUrl || "",
15
- id,
16
- {
17
- page: 1,
18
- pageSize: 10
19
- },
20
- BigInt(1e3),
21
- void 0
22
- );
23
- return prepareHistoricalOrderChartData(data, $colorTheme);
24
- },
25
- enabled: !!subgraphUrl
54
+ const data = await order.getTradesList(void 0, void 0, void 0);
55
+ if (data.error) throw new Error(data.error.readableMsg);
56
+ return data.value.trades;
57
+ }
58
+ });
59
+ $: trades = $query?.data ?? [];
60
+ $: {
61
+ if (trades.length > 0) {
62
+ const isFirstLoad = pairs.length === 0;
63
+ const extractedPairs = extractPairsFromTrades(trades);
64
+ for (const newPair of extractedPairs) {
65
+ if (findPairIndex(pairs, newPair) === -1) {
66
+ pairs = [...pairs, newPair];
67
+ }
68
+ }
69
+ if (isFirstLoad && pairs.length > 0) {
70
+ const defaultPair = getDefaultPair(trades);
71
+ if (defaultPair) {
72
+ const idx = findPairIndex(pairs, defaultPair);
73
+ if (idx >= 0) selectedPairIndex = idx;
74
+ }
75
+ }
76
+ }
77
+ }
78
+ $: chartData = selectedPair ? transformPairTrades({
79
+ trades,
80
+ baseTokenAddress: selectedPair.baseToken.address,
81
+ quoteTokenAddress: selectedPair.quoteToken.address,
82
+ timeDeltaSeconds: timeDelta
83
+ }) : null;
84
+ $: pairLabel = selectedPair ? `${getTokenLabel(selectedPair.baseToken)}/${getTokenLabel(selectedPair.quoteToken)}` : "Select pair";
85
+ function handleFlipPair() {
86
+ if (!selectedPair) return;
87
+ const flipped = flipTradingPair(selectedPair);
88
+ const existingIdx = findPairIndex(pairs, flipped);
89
+ if (existingIdx >= 0) {
90
+ selectedPairIndex = existingIdx;
91
+ } else {
92
+ pairs = [...pairs, flipped];
93
+ selectedPairIndex = pairs.length - 1;
94
+ }
95
+ }
96
+ function selectPair(index) {
97
+ selectedPairIndex = index;
98
+ dropdownOpen = false;
99
+ }
100
+ function setupChart() {
101
+ if (!chartElement) return;
102
+ chart = createChart(chartElement, {
103
+ autoSize: true,
104
+ leftPriceScale: {
105
+ visible: true,
106
+ borderVisible: false
107
+ },
108
+ rightPriceScale: {
109
+ visible: true,
110
+ borderVisible: false
111
+ },
112
+ crosshair: {
113
+ mode: CrosshairMode.Normal
114
+ },
115
+ timeScale: {
116
+ tickMarkFormatter: (time) => formatChartTimestamp(time, timeDelta)
117
+ }
118
+ });
119
+ buyVolumeSeries = chart.addHistogramSeries({
120
+ color: CHART_COLORS.BUY_VOLUME_TRANSPARENT,
121
+ priceFormat: { type: "volume" },
122
+ priceScaleId: "left"
123
+ });
124
+ sellVolumeSeries = chart.addHistogramSeries({
125
+ color: CHART_COLORS.SELL_VOLUME_TRANSPARENT,
126
+ priceFormat: { type: "volume" },
127
+ priceScaleId: "left"
128
+ });
129
+ buyVolumeSeries.createPriceLine({
130
+ price: 0,
131
+ color: CHART_COLORS.ZERO_LINE,
132
+ lineWidth: 1,
133
+ lineStyle: 0,
134
+ axisLabelVisible: false
135
+ });
136
+ sellVolumeSeries.createPriceLine({
137
+ price: 0,
138
+ color: CHART_COLORS.ZERO_LINE,
139
+ lineWidth: 1,
140
+ lineStyle: 0,
141
+ axisLabelVisible: false
142
+ });
143
+ priceSeries = chart.addLineSeries({
144
+ color: CHART_COLORS.PRICE_LINE,
145
+ lineWidth: 2,
146
+ priceScaleId: "right",
147
+ priceFormat: {
148
+ type: "price",
149
+ precision: 6,
150
+ minMove: 1e-6
151
+ }
152
+ });
153
+ chart.priceScale("left").applyOptions({
154
+ scaleMargins: { top: 0.1, bottom: 0.1 }
155
+ });
156
+ chart.priceScale("right").applyOptions({
157
+ scaleMargins: { top: 0.1, bottom: 0.1 }
158
+ });
159
+ setChartOptions();
160
+ updateChartData();
161
+ }
162
+ function setChartOptions() {
163
+ if (!chart) return;
164
+ chart.applyOptions({
165
+ ...$lightweightChartsTheme,
166
+ autoSize: true
167
+ });
168
+ }
169
+ function updateChartData() {
170
+ if (!chart || !priceSeries || !buyVolumeSeries || !sellVolumeSeries) return;
171
+ if (chartData) {
172
+ priceSeries.setData(chartData.pricePoints);
173
+ buyVolumeSeries.setData(chartData.buyVolumePoints);
174
+ sellVolumeSeries.setData(chartData.sellVolumePoints);
175
+ } else {
176
+ priceSeries.setData([]);
177
+ buyVolumeSeries.setData([]);
178
+ sellVolumeSeries.setData([]);
179
+ }
180
+ setTimeScale();
181
+ }
182
+ function setTimeScale() {
183
+ if (!chart) return;
184
+ chart.timeScale().applyOptions({
185
+ tickMarkFormatter: (time) => formatChartTimestamp(time, timeDelta)
186
+ });
187
+ if (chartData && chartData.pricePoints.length > 0) {
188
+ const now = Math.floor(Date.now() / 1e3);
189
+ const from = now - timeDelta;
190
+ chart.timeScale().setVisibleRange({ from, to: now });
191
+ } else {
192
+ chart.timeScale().fitContent();
193
+ }
194
+ }
195
+ function destroyChart() {
196
+ if (chart) {
197
+ chart.remove();
198
+ chart = void 0;
199
+ priceSeries = void 0;
200
+ buyVolumeSeries = void 0;
201
+ sellVolumeSeries = void 0;
202
+ }
203
+ }
204
+ $: if (chartElement && trades.length > 0 && selectedPair && !chart)
205
+ setupChart();
206
+ $: if (chart && chartData) updateChartData();
207
+ $: if (chart && $lightweightChartsTheme) setChartOptions();
208
+ onMount(() => {
209
+ if (trades.length > 0 && selectedPair) setupChart();
210
+ });
211
+ onDestroy(() => {
212
+ destroyChart();
26
213
  });
27
214
  </script>
28
215
 
29
- <TanstackLightweightChartLine
30
- title="Trades"
31
- {query}
32
- timeTransform={(d) => d.time}
33
- valueTransform={(d) => d.value}
34
- emptyMessage="No trades found"
35
- {lightweightChartsTheme}
36
- />
216
+ <div
217
+ class="flex h-full flex-col overflow-hidden rounded-lg border bg-gray-50 dark:border-none dark:bg-gray-700"
218
+ >
219
+ <div
220
+ class="flex w-full flex-wrap items-center justify-between gap-2 border-b p-3 dark:border-gray-700"
221
+ >
222
+ <div class="flex items-center gap-2">
223
+ <div
224
+ class="text-xl text-gray-900 dark:text-white"
225
+ data-testid="chart-title"
226
+ >
227
+ Trades
228
+ </div>
229
+ {#if $query?.isLoading}
230
+ <Spinner class="h-4 w-4" color="white" data-testid="chart-spinner" />
231
+ {/if}
232
+ </div>
233
+
234
+ <div class="flex flex-wrap items-center gap-2">
235
+ {#if pairs.length > 0}
236
+ <div class="flex items-center gap-1">
237
+ <Button
238
+ color="alternative"
239
+ size="xs"
240
+ class="flex items-center gap-1"
241
+ data-testid="pair-selector"
242
+ >
243
+ {pairLabel}
244
+ <ChevronDownSolid class="h-3 w-3" />
245
+ </Button>
246
+ <Dropdown bind:open={dropdownOpen} data-testid="pair-dropdown">
247
+ {#each pairs as pair, idx}
248
+ <DropdownItem
249
+ on:click={() => selectPair(idx)}
250
+ data-testid="pair-option-{idx}"
251
+ >
252
+ {getTokenLabel(pair.baseToken)}/{getTokenLabel(pair.quoteToken)}
253
+ </DropdownItem>
254
+ {/each}
255
+ </Dropdown>
256
+ <Button
257
+ color="alternative"
258
+ size="xs"
259
+ on:click={handleFlipPair}
260
+ title="Flip pair"
261
+ data-testid="flip-button"
262
+ >
263
+ <svg
264
+ class="h-4 w-4"
265
+ fill="none"
266
+ stroke="currentColor"
267
+ viewBox="0 0 24 24"
268
+ xmlns="http://www.w3.org/2000/svg"
269
+ >
270
+ <path
271
+ stroke-linecap="round"
272
+ stroke-linejoin="round"
273
+ stroke-width="2"
274
+ d="M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4"
275
+ />
276
+ </svg>
277
+ </Button>
278
+ </div>
279
+ {/if}
280
+
281
+ {#if trades.length > 0}
282
+ <ButtonGroup class="bg-gray-800" data-testid="time-filters">
283
+ {#each TIME_OPTIONS as option}
284
+ <Button
285
+ on:click={() => (timeDelta = option.delta)}
286
+ color={timeDelta === option.delta ? "primary" : "alternative"}
287
+ size="xs"
288
+ class="px-2 py-1">{option.label}</Button
289
+ >
290
+ {/each}
291
+ </ButtonGroup>
292
+ {/if}
293
+ </div>
294
+ </div>
295
+
296
+ <div
297
+ class="relative flex w-full grow items-center justify-center bg-white dark:bg-gray-800"
298
+ >
299
+ {#if $query?.isLoading}
300
+ <div class="text-gray-800 dark:text-gray-400">Loading...</div>
301
+ {:else if $query?.isError}
302
+ <div class="text-red-500" data-testid="chart-error">
303
+ Error: {$query?.error?.message ?? "Failed to load trades"}
304
+ </div>
305
+ {:else if trades.length === 0 || !selectedPair}
306
+ <div class="text-gray-800 dark:text-gray-400" data-testid="chart-empty">
307
+ No trades found
308
+ </div>
309
+ {:else}
310
+ <div
311
+ bind:this={chartElement}
312
+ class="h-full w-full overflow-hidden"
313
+ data-testid="chart-element"
314
+ ></div>
315
+ {#if chartData && chartData.pricePoints.length === 0}
316
+ <div
317
+ class="absolute inset-0 flex items-center justify-center bg-white/80 dark:bg-gray-800/80"
318
+ data-testid="chart-no-data"
319
+ >
320
+ <span class="text-gray-800 dark:text-gray-400"
321
+ >No trades found for selected pair and time range</span
322
+ >
323
+ </div>
324
+ {/if}
325
+ {/if}
326
+ </div>
327
+ </div>
@@ -1,10 +1,10 @@
1
1
  import { SvelteComponent } from "svelte";
2
+ import type { Readable } from "svelte/store";
3
+ import { type RaindexOrder } from "@rainlanguage/raindex";
2
4
  declare const __propDef: {
3
5
  props: {
4
- id: string;
5
- subgraphUrl: string;
6
- colorTheme: any;
7
- lightweightChartsTheme: any;
6
+ order: RaindexOrder;
7
+ lightweightChartsTheme: Readable<Record<string, unknown>>;
8
8
  };
9
9
  events: {
10
10
  [evt: string]: CustomEvent<any>;
@@ -1,17 +1,13 @@
1
1
  <script generics="T">import LightweightChart from "./LightweightChart.svelte";
2
- import { sortBy } from "lodash";
2
+ import { transformAndSortData } from "./transformAndSortData";
3
3
  export let query;
4
4
  export let timeTransform;
5
5
  export let valueTransform;
6
6
  export let lightweightChartsTheme;
7
- const transformAndSortData = (data2) => {
8
- const transformedData = data2.map((d) => ({
9
- value: valueTransform(d),
10
- time: timeTransform(d)
11
- }));
12
- return sortBy(transformedData, (d) => d.time);
13
- };
14
- $: data = transformAndSortData($query.data ?? []);
7
+ $: data = transformAndSortData($query.data ?? [], {
8
+ valueTransform,
9
+ timeTransform
10
+ });
15
11
  const createSeries = (chart) => chart.addLineSeries({ lineWidth: 1 });
16
12
  </script>
17
13
 
@@ -1,37 +1,19 @@
1
- <script>import { timestampSecondsToUTCTimestamp } from "../../utils/time";
2
- import { bigintToFloat } from "../../utils/number";
3
- import { createQuery } from "@tanstack/svelte-query";
4
- import {
5
- getVaultBalanceChanges
6
- } from "@rainlanguage/orderbook/js_api";
7
- import TanstackLightweightChartLine from "../charts/TanstackLightweightChartLine.svelte";
8
- import { QKEY_VAULT_CHANGES } from "../../queries/keys";
9
- export let vault;
10
- export let id;
11
- export let subgraphUrl;
12
- export let lightweightChartsTheme;
13
- $: query = createQuery({
14
- queryKey: [id, QKEY_VAULT_CHANGES + id, QKEY_VAULT_CHANGES],
15
- queryFn: () => {
16
- return getVaultBalanceChanges(subgraphUrl || "", vault.id, {
17
- page: 1,
18
- pageSize: 1e3
19
- });
20
- },
21
- enabled: !!subgraphUrl
22
- });
23
- const Chart = TanstackLightweightChartLine;
24
- </script>
1
+ <!-- TODO: Issue #1989 -->
2
+ <script></script>
25
3
 
4
+ <!--
26
5
  {#if vault && $query.data}
27
6
  <Chart
28
7
  title="Balance history"
29
8
  priceSymbol={vault.token.symbol}
30
9
  {query}
31
10
  timeTransform={(d) => timestampSecondsToUTCTimestamp(BigInt(d.timestamp))}
32
- valueTransform={(d) =>
33
- bigintToFloat(BigInt(d.newVaultBalance), Number(vault.token.decimals ?? 0))}
11
+ valueTransform={(d) => parseFloat(d.formattedNewBalance)}
34
12
  emptyMessage="No deposits or withdrawals found"
35
13
  {lightweightChartsTheme}
36
14
  />
15
+ {/if} -->
16
+
17
+ {#if false}
18
+ <div>TODO: Issue #1989</div>
37
19
  {/if}
@@ -1,12 +1,6 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { SgVault } from '@rainlanguage/orderbook/js_api';
3
2
  declare const __propDef: {
4
- props: {
5
- vault: SgVault;
6
- id: string;
7
- subgraphUrl: string;
8
- lightweightChartsTheme: any;
9
- };
3
+ props: Record<string, never>;
10
4
  events: {
11
5
  [evt: string]: CustomEvent<any>;
12
6
  };
@@ -0,0 +1,24 @@
1
+ import type { UTCTimestamp } from "lightweight-charts";
2
+ /**
3
+ * Filters out data points with duplicate timestamps, keeping only the first occurrence.
4
+ *
5
+ * @param data Array of data points with time and value properties
6
+ * @returns A new array with only unique timestamps
7
+ */
8
+ export declare const deduplicateByTime: <T extends {
9
+ time: UTCTimestamp;
10
+ }>(data: T[]) => T[];
11
+ /**
12
+ * Transforms and sorts data, ensuring unique timestamps.
13
+ *
14
+ * @param data The source data to transform
15
+ * @param options Configuration object with transform functions
16
+ * @returns Transformed, sorted, and deduplicated data
17
+ */
18
+ export declare const transformAndSortData: <T>(data: T[], options: {
19
+ valueTransform: (item: T) => number;
20
+ timeTransform: (item: T) => UTCTimestamp;
21
+ }) => Array<{
22
+ value: number;
23
+ time: UTCTimestamp;
24
+ }>;
@@ -0,0 +1,111 @@
1
+ import { sortBy } from "lodash";
2
+ /**
3
+ * Filters out data points with duplicate timestamps, keeping only the first occurrence.
4
+ *
5
+ * @param data Array of data points with time and value properties
6
+ * @returns A new array with only unique timestamps
7
+ */
8
+ export const deduplicateByTime = (data) => {
9
+ const uniqueData = [];
10
+ const seenTimes = new Set();
11
+ for (const dataPoint of data) {
12
+ if (!seenTimes.has(dataPoint.time)) {
13
+ uniqueData.push(dataPoint);
14
+ seenTimes.add(dataPoint.time);
15
+ }
16
+ }
17
+ return uniqueData;
18
+ };
19
+ /**
20
+ * Transforms and sorts data, ensuring unique timestamps.
21
+ *
22
+ * @param data The source data to transform
23
+ * @param options Configuration object with transform functions
24
+ * @returns Transformed, sorted, and deduplicated data
25
+ */
26
+ export const transformAndSortData = (data, options) => {
27
+ const { valueTransform, timeTransform } = options;
28
+ const transformedData = data.map((d) => ({
29
+ value: valueTransform(d),
30
+ time: timeTransform(d),
31
+ }));
32
+ const sortedData = sortBy(transformedData, (d) => d.time);
33
+ return deduplicateByTime(sortedData);
34
+ };
35
+ if (import.meta.vitest) {
36
+ const { it, expect, describe } = import.meta.vitest;
37
+ describe("deduplicateByTime", () => {
38
+ it("should remove entries with duplicate timestamps", () => {
39
+ const data = [
40
+ { time: 100, value: 10 },
41
+ { time: 200, value: 20 },
42
+ { time: 200, value: 25 }, // Duplicate timestamp
43
+ { time: 300, value: 30 },
44
+ ];
45
+ const result = deduplicateByTime(data);
46
+ const expected = [
47
+ { time: 100, value: 10 },
48
+ { time: 200, value: 20 }, // First occurrence kept
49
+ { time: 300, value: 30 },
50
+ ];
51
+ expect(result).toEqual(expected);
52
+ });
53
+ it("should handle multiple duplicate timestamps", () => {
54
+ const data = [
55
+ { time: 100, value: 10 },
56
+ { time: 100, value: 15 }, // Duplicate
57
+ { time: 100, value: 18 }, // Duplicate
58
+ { time: 200, value: 20 },
59
+ ];
60
+ const result = deduplicateByTime(data);
61
+ const expected = [
62
+ { time: 100, value: 10 }, // Only first one kept
63
+ { time: 200, value: 20 },
64
+ ];
65
+ expect(result).toEqual(expected);
66
+ });
67
+ it("should return original array if no duplicates", () => {
68
+ const data = [
69
+ { time: 100, value: 10 },
70
+ { time: 200, value: 20 },
71
+ { time: 300, value: 30 },
72
+ ];
73
+ const result = deduplicateByTime(data);
74
+ expect(result).toEqual(data);
75
+ expect(result).not.toBe(data);
76
+ });
77
+ it("should handle empty array", () => {
78
+ const data = [];
79
+ const result = deduplicateByTime(data);
80
+ expect(result).toEqual([]);
81
+ });
82
+ });
83
+ describe("transformAndSortData", () => {
84
+ it("should transform, sort, and deduplicate data", () => {
85
+ const rawData = [
86
+ { timestamp: 3000, price: 300 },
87
+ { timestamp: 1000, price: 100 },
88
+ { timestamp: 2000, price: 200 },
89
+ { timestamp: 2000, price: 250 }, // Duplicate timestamp
90
+ ];
91
+ const result = transformAndSortData(rawData, {
92
+ valueTransform: (item) => item.price,
93
+ timeTransform: (item) => item.timestamp,
94
+ });
95
+ const expected = [
96
+ { time: 1000, value: 100 },
97
+ { time: 2000, value: 200 }, // First occurrence kept after sorting
98
+ { time: 3000, value: 300 },
99
+ ];
100
+ expect(result).toEqual(expected);
101
+ });
102
+ it("should handle empty data array", () => {
103
+ const rawData = [];
104
+ const result = transformAndSortData(rawData, {
105
+ valueTransform: (item) => item.price,
106
+ timeTransform: (item) => item.timestamp,
107
+ });
108
+ expect(result).toEqual([]);
109
+ });
110
+ });
111
+ }
@@ -0,0 +1,11 @@
1
+ <script>import { Checkbox } from "flowbite-svelte";
2
+ export let showInactiveOrders;
3
+ let checked = $showInactiveOrders ? true : false;
4
+ function handleChange() {
5
+ $showInactiveOrders = !$showInactiveOrders;
6
+ }
7
+ </script>
8
+
9
+ <div data-testid="order-status-checkbox">
10
+ <Checkbox {checked} on:change={handleChange}>Include inactive orders</Checkbox>
11
+ </div>
@@ -0,0 +1,19 @@
1
+ import { SvelteComponent } from "svelte";
2
+ import type { AppStoresInterface } from '../../types/appStores';
3
+ declare const __propDef: {
4
+ props: {
5
+ showInactiveOrders: AppStoresInterface["showInactiveOrders"];
6
+ };
7
+ events: {
8
+ [evt: string]: CustomEvent<any>;
9
+ };
10
+ slots: {};
11
+ exports?: {} | undefined;
12
+ bindings?: string | undefined;
13
+ };
14
+ export type CheckboxActiveOrdersProps = typeof __propDef.props;
15
+ export type CheckboxActiveOrdersEvents = typeof __propDef.events;
16
+ export type CheckboxActiveOrdersSlots = typeof __propDef.slots;
17
+ export default class CheckboxActiveOrders extends SvelteComponent<CheckboxActiveOrdersProps, CheckboxActiveOrdersEvents, CheckboxActiveOrdersSlots> {
18
+ }
19
+ export {};
@@ -2,6 +2,7 @@
2
2
  export let active;
3
3
  export let buttonText;
4
4
  export let clickHandler;
5
+ export let dataTestId;
5
6
  </script>
6
7
 
7
8
  <Button
@@ -9,6 +10,7 @@ export let clickHandler;
9
10
  color="alternative"
10
11
  class={active ? 'border-2 border-blue-300 dark:border-blue-700' : 'border-2 border-transparent'}
11
12
  on:click={clickHandler}
13
+ data-testid={dataTestId}
12
14
  >
13
15
  {buttonText}
14
16
  </Button>
@@ -4,6 +4,7 @@ declare const __propDef: {
4
4
  active: boolean;
5
5
  buttonText: string;
6
6
  clickHandler: () => void;
7
+ dataTestId: string;
7
8
  };
8
9
  events: {
9
10
  [evt: string]: CustomEvent<any>;
@@ -2,11 +2,12 @@
2
2
  import { RainlangLR } from "codemirror-rainlang";
3
3
  import { lightCodeMirrorTheme } from "../../utils/codeMirrorThemes";
4
4
  import { Button, Modal } from "flowbite-svelte";
5
- export let gui;
5
+ import { useRaindexOrderBuilder } from "../../hooks/useRaindexOrderBuilder";
6
+ const builder = useRaindexOrderBuilder();
6
7
  let rainlangText = null;
7
8
  let open = false;
8
9
  async function generateRainlang() {
9
- let result = await gui.getComposedRainlang();
10
+ let result = await builder.getComposedRainlang();
10
11
  if (result.error) {
11
12
  throw new Error(result.error.msg);
12
13
  }
@@ -1,9 +1,6 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { DotrainOrderGui } from '@rainlanguage/orderbook/js_api';
3
2
  declare const __propDef: {
4
- props: {
5
- gui: DotrainOrderGui;
6
- };
3
+ props: Record<string, never>;
7
4
  events: {
8
5
  [evt: string]: CustomEvent<any>;
9
6
  };