@rainlanguage/ui-components 0.0.1-alpha.8 → 0.0.1-alpha.80

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 (132) hide show
  1. package/dist/__fixtures__/orderDetail.d.ts +1 -1
  2. package/dist/__mocks__/MockComponent.svelte +4 -0
  3. package/dist/__mocks__/MockComponent.svelte.d.ts +3 -1
  4. package/dist/__mocks__/mockTransactionStore.d.ts +3 -21
  5. package/dist/__mocks__/mockTransactionStore.js +26 -13
  6. package/dist/__mocks__/settings.d.ts +6 -2
  7. package/dist/__mocks__/settings.js +6 -1
  8. package/dist/__mocks__/stores.d.ts +86 -19
  9. package/dist/__mocks__/stores.js +26 -17
  10. package/dist/components/ButtonVaultLink.svelte +3 -3
  11. package/dist/components/ButtonVaultLink.svelte.d.ts +1 -1
  12. package/dist/components/CheckboxMyItemsOnly.svelte +3 -2
  13. package/dist/components/CheckboxMyItemsOnly.svelte.d.ts +0 -1
  14. package/dist/components/CodeMirrorDotrain.svelte +4 -0
  15. package/dist/components/CodeMirrorDotrain.svelte.d.ts +1 -0
  16. package/dist/components/CodeMirrorRainlang.svelte +2 -2
  17. package/dist/components/CodeMirrorRainlang.svelte.d.ts +1 -1
  18. package/dist/components/Hash.svelte +3 -3
  19. package/dist/components/License.svelte +5 -4
  20. package/dist/components/ListViewOrderbookFilters.svelte +14 -13
  21. package/dist/components/ListViewOrderbookFilters.svelte.d.ts +2 -5
  22. package/dist/components/OrderOrVaultHash.svelte +10 -7
  23. package/dist/components/OrderOrVaultHash.svelte.d.ts +1 -1
  24. package/dist/components/PageHeader.svelte +20 -22
  25. package/dist/components/PageHeader.svelte.d.ts +1 -0
  26. package/dist/components/TanstackAppTable.svelte +2 -3
  27. package/dist/components/TanstackAppTable.svelte.d.ts +1 -1
  28. package/dist/components/Tooltip.svelte +8 -0
  29. package/dist/components/Tooltip.svelte.d.ts +21 -0
  30. package/dist/components/charts/OrderTradesChart.svelte +1 -1
  31. package/dist/components/charts/TanstackLightweightChartLine.svelte +5 -9
  32. package/dist/components/charts/VaultBalanceChart.svelte +1 -1
  33. package/dist/components/charts/VaultBalanceChart.svelte.d.ts +1 -1
  34. package/dist/components/charts/transformAndSortData.d.ts +24 -0
  35. package/dist/components/charts/transformAndSortData.js +111 -0
  36. package/dist/components/checkbox/CheckboxActiveOrders.svelte +11 -0
  37. package/dist/components/checkbox/CheckboxActiveOrders.svelte.d.ts +19 -0
  38. package/dist/components/deployment/ComposedRainlangModal.svelte +7 -5
  39. package/dist/components/deployment/ComposedRainlangModal.svelte.d.ts +1 -4
  40. package/dist/components/deployment/DeploymentSectionHeader.svelte +7 -4
  41. package/dist/components/deployment/DeploymentSteps.svelte +180 -155
  42. package/dist/components/deployment/DeploymentSteps.svelte.d.ts +7 -13
  43. package/dist/components/deployment/DeploymentsSection.svelte +18 -14
  44. package/dist/components/deployment/DepositInput.svelte +31 -14
  45. package/dist/components/deployment/DepositInput.svelte.d.ts +1 -2
  46. package/dist/components/deployment/FieldDefinitionInput.svelte +20 -14
  47. package/dist/components/deployment/FieldDefinitionInput.svelte.d.ts +1 -2
  48. package/dist/components/deployment/SelectToken.svelte +12 -3
  49. package/dist/components/deployment/SelectToken.svelte.d.ts +1 -2
  50. package/dist/components/deployment/StrategyPage.svelte +6 -2
  51. package/dist/components/deployment/TokenIOInput.svelte +15 -5
  52. package/dist/components/deployment/TokenIOInput.svelte.d.ts +1 -2
  53. package/dist/components/deployment/handleDeployment.d.ts +11 -0
  54. package/dist/components/deployment/handleDeployment.js +33 -0
  55. package/dist/components/detail/OrderDetail.svelte +46 -41
  56. package/dist/components/detail/OrderDetail.svelte.d.ts +11 -8
  57. package/dist/components/detail/TanstackOrderQuote.svelte +6 -6
  58. package/dist/components/detail/TanstackOrderQuote.svelte.d.ts +1 -1
  59. package/dist/components/detail/VaultDetail.svelte +29 -40
  60. package/dist/components/detail/VaultDetail.svelte.d.ts +10 -10
  61. package/dist/components/dropdown/DropdownActiveSubgraphs.svelte.d.ts +1 -1
  62. package/dist/components/icon/Refresh.svelte +2 -1
  63. package/dist/components/icon/Refresh.svelte.d.ts +1 -0
  64. package/dist/components/input/InputOrderHash.svelte +1 -1
  65. package/dist/components/input/InputRegistryUrl.svelte +2 -2
  66. package/dist/components/input/InputToken.svelte +2 -2
  67. package/dist/components/input/InputTokenAmount.svelte +1 -1
  68. package/dist/components/tables/OrderAPY.svelte +1 -1
  69. package/dist/components/tables/OrderTradesListTable.svelte +1 -1
  70. package/dist/components/tables/OrderVaultsVolTable.svelte +1 -1
  71. package/dist/components/tables/OrdersListTable.svelte +16 -18
  72. package/dist/components/tables/OrdersListTable.svelte.d.ts +0 -6
  73. package/dist/components/tables/VaultBalanceChangesTable.svelte +3 -3
  74. package/dist/components/tables/VaultsListTable.svelte +43 -52
  75. package/dist/components/tables/VaultsListTable.svelte.d.ts +3 -6
  76. package/dist/components/wallet/WalletConnect.svelte +5 -4
  77. package/dist/components/wallet/WalletConnect.svelte.d.ts +0 -1
  78. package/dist/consts.d.ts +1 -0
  79. package/dist/consts.js +1 -0
  80. package/dist/errors/DeploymentStepsError.d.ts +5 -2
  81. package/dist/errors/DeploymentStepsError.js +4 -1
  82. package/dist/hooks/useGui.d.ts +3 -0
  83. package/dist/hooks/useGui.js +11 -0
  84. package/dist/index.d.ts +12 -6
  85. package/dist/index.js +14 -5
  86. package/dist/providers/GuiProvider.svelte +8 -0
  87. package/dist/providers/GuiProvider.svelte.d.ts +21 -0
  88. package/dist/providers/wallet/WalletProvider.svelte +7 -0
  89. package/dist/providers/wallet/WalletProvider.svelte.d.ts +21 -0
  90. package/dist/providers/wallet/context.d.ts +10 -0
  91. package/dist/providers/wallet/context.js +47 -0
  92. package/dist/providers/wallet/useAccount.d.ts +8 -0
  93. package/dist/providers/wallet/useAccount.js +148 -0
  94. package/dist/queries/queryClient.d.ts +1 -1
  95. package/dist/queries/queryClient.js +3 -3
  96. package/dist/services/awaitTransactionIndexing.d.ts +163 -0
  97. package/dist/services/awaitTransactionIndexing.js +120 -0
  98. package/dist/services/handleShareChoices.d.ts +2 -2
  99. package/dist/services/handleShareChoices.js +7 -2
  100. package/dist/services/historicalOrderCharts.d.ts +1 -1
  101. package/dist/services/index.d.ts +1 -1
  102. package/dist/services/index.js +1 -1
  103. package/dist/services/registry.d.ts +6 -0
  104. package/dist/services/registry.js +156 -0
  105. package/dist/stores/transactionStore.d.ts +7 -10
  106. package/dist/stores/transactionStore.js +35 -61
  107. package/dist/storesGeneric/cachedWritableStore.d.ts +57 -0
  108. package/dist/storesGeneric/cachedWritableStore.js +93 -0
  109. package/dist/types/account.d.ts +3 -0
  110. package/dist/types/account.js +1 -0
  111. package/dist/types/appStores.d.ts +2 -2
  112. package/dist/types/modal.d.ts +1 -1
  113. package/dist/types/strategy.d.ts +1 -1
  114. package/dist/types/transaction.d.ts +3 -3
  115. package/dist/utils/constructHashLink.d.ts +23 -0
  116. package/dist/utils/constructHashLink.js +110 -0
  117. package/dist/utils/vault.d.ts +1 -1
  118. package/package.json +34 -34
  119. package/dist/components/deployment/DepositsSection.svelte +0 -8
  120. package/dist/components/deployment/DepositsSection.svelte.d.ts +0 -20
  121. package/dist/components/deployment/FieldDefinitionsSection.svelte +0 -9
  122. package/dist/components/deployment/FieldDefinitionsSection.svelte.d.ts +0 -20
  123. package/dist/components/deployment/SelectTokensSection.svelte +0 -17
  124. package/dist/components/deployment/SelectTokensSection.svelte.d.ts +0 -21
  125. package/dist/components/deployment/TokenIOSection.svelte +0 -17
  126. package/dist/components/deployment/TokenIOSection.svelte.d.ts +0 -21
  127. package/dist/components/deployment/getDeploymentTransactionArgs.d.ts +0 -17
  128. package/dist/components/deployment/getDeploymentTransactionArgs.js +0 -24
  129. package/dist/components/detail/DepositOrWithdrawButtons.svelte +0 -44
  130. package/dist/components/detail/DepositOrWithdrawButtons.svelte.d.ts +0 -26
  131. package/dist/components/dropdown/DropdownOrderStatus.svelte +0 -31
  132. package/dist/components/dropdown/DropdownOrderStatus.svelte.d.ts +0 -19
@@ -2,16 +2,21 @@
2
2
  import { CheckCircleSolid, CloseCircleSolid } from "flowbite-svelte-icons";
3
3
  import { Spinner } from "flowbite-svelte";
4
4
  import { onMount } from "svelte";
5
+ import { useGui } from "../../hooks/useGui";
5
6
  export let token;
6
- export let gui;
7
7
  export let onSelectTokenSelect;
8
8
  let inputValue = null;
9
9
  let tokenInfo = null;
10
10
  let error = "";
11
11
  let checking = false;
12
+ const gui = useGui();
12
13
  onMount(async () => {
13
14
  try {
14
- tokenInfo = await gui?.getTokenInfo(token.key);
15
+ let result = await gui.getTokenInfo(token.key);
16
+ if (result.error) {
17
+ throw new Error(result.error.msg);
18
+ }
19
+ tokenInfo = result.value;
15
20
  if (tokenInfo?.address) {
16
21
  inputValue = tokenInfo.address;
17
22
  }
@@ -21,7 +26,11 @@ onMount(async () => {
21
26
  async function getInfoForSelectedToken() {
22
27
  error = "";
23
28
  try {
24
- tokenInfo = await gui.getTokenInfo(token.key);
29
+ let result = await gui.getTokenInfo(token.key);
30
+ if (result.error) {
31
+ throw new Error(result.error.msg);
32
+ }
33
+ tokenInfo = result.value;
25
34
  error = "";
26
35
  } catch {
27
36
  return error = "No token exists at this address.";
@@ -1,9 +1,8 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { DotrainOrderGui, GuiSelectTokensCfg } from '@rainlanguage/orderbook/js_api';
2
+ import type { GuiSelectTokensCfg } from '@rainlanguage/orderbook';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  token: GuiSelectTokensCfg;
6
- gui: DotrainOrderGui;
7
6
  onSelectTokenSelect: () => void;
8
7
  };
9
8
  events: {
@@ -1,5 +1,5 @@
1
1
  <script>import { fade } from "svelte/transition";
2
- import { DotrainOrderGui } from "@rainlanguage/orderbook/js_api";
2
+ import { DotrainOrderGui } from "@rainlanguage/orderbook";
3
3
  import DeploymentsSection from "./DeploymentsSection.svelte";
4
4
  import SvelteMarkdown from "svelte-markdown";
5
5
  export let strategyName = "";
@@ -21,7 +21,11 @@ const fetchMarkdownContent = async (url) => {
21
21
  };
22
22
  const getStrategyWithMarkdown = async () => {
23
23
  try {
24
- const strategyDetails = await DotrainOrderGui.getStrategyDetails(dotrain);
24
+ const result = await DotrainOrderGui.getStrategyDetails(dotrain);
25
+ if (result.error) {
26
+ throw new Error(result.error.msg);
27
+ }
28
+ const strategyDetails = result.value;
25
29
  if (strategyDetails.description && isMarkdownUrl(strategyDetails.description)) {
26
30
  await fetchMarkdownContent(strategyDetails.description);
27
31
  }
@@ -1,17 +1,22 @@
1
1
  <script>import { Input } from "flowbite-svelte";
2
- import {
3
- } from "@rainlanguage/orderbook/js_api";
2
+ import {} from "@rainlanguage/orderbook";
4
3
  import DeploymentSectionHeader from "./DeploymentSectionHeader.svelte";
5
4
  import { onMount } from "svelte";
5
+ import { useGui } from "../../hooks/useGui";
6
+ const gui = useGui();
6
7
  export let i;
7
8
  export let label;
8
9
  export let vault;
9
- export let gui;
10
10
  let tokenInfo = null;
11
11
  let inputValue = "";
12
12
  let error = "";
13
13
  onMount(() => {
14
- const vaultIds = gui.getVaultIds();
14
+ const result = gui.getVaultIds();
15
+ if (result.error) {
16
+ error = result.error.msg;
17
+ return;
18
+ }
19
+ const vaultIds = result.value;
15
20
  if (label === "Input") {
16
21
  inputValue = vaultIds.get("input")?.[i];
17
22
  } else if (label === "Output") {
@@ -21,7 +26,12 @@ onMount(() => {
21
26
  const handleGetTokenInfo = async () => {
22
27
  if (!vault.token?.key) return;
23
28
  try {
24
- tokenInfo = await gui?.getTokenInfo(vault.token?.key);
29
+ let result = await gui.getTokenInfo(vault.token?.key);
30
+ if (result.error) {
31
+ error = result.error.msg;
32
+ return;
33
+ }
34
+ tokenInfo = result.value;
25
35
  } catch (e) {
26
36
  const errorMessage = e.message ? e.message : "Error getting token info.";
27
37
  error = errorMessage;
@@ -1,11 +1,10 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import { type OrderIOCfg, type DotrainOrderGui } from '@rainlanguage/orderbook/js_api';
2
+ import { type OrderIOCfg } from '@rainlanguage/orderbook';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  i: number;
6
6
  label: "Input" | "Output";
7
7
  vault: OrderIOCfg;
8
- gui: DotrainOrderGui;
9
8
  };
10
9
  events: {
11
10
  [evt: string]: CustomEvent<any>;
@@ -0,0 +1,11 @@
1
+ import type { DotrainOrderGui } from '@rainlanguage/orderbook';
2
+ import type { DeploymentArgs } from '../../types/transaction';
3
+ export declare enum AddOrderErrors {
4
+ ADD_ORDER_FAILED = "Failed to add order",
5
+ MISSING_GUI = "Order GUI is required",
6
+ MISSING_CONFIG = "Wagmi config is required",
7
+ NO_ACCOUNT_CONNECTED = "No wallet address found",
8
+ ERROR_GETTING_ARGS = "Error getting deployment transaction args",
9
+ ERROR_GETTING_NETWORK_KEY = "Error getting network key"
10
+ }
11
+ export declare function handleDeployment(gui: DotrainOrderGui, account: string | null, subgraphUrl?: string): Promise<DeploymentArgs>;
@@ -0,0 +1,33 @@
1
+ export var AddOrderErrors;
2
+ (function (AddOrderErrors) {
3
+ AddOrderErrors["ADD_ORDER_FAILED"] = "Failed to add order";
4
+ AddOrderErrors["MISSING_GUI"] = "Order GUI is required";
5
+ AddOrderErrors["MISSING_CONFIG"] = "Wagmi config is required";
6
+ AddOrderErrors["NO_ACCOUNT_CONNECTED"] = "No wallet address found";
7
+ AddOrderErrors["ERROR_GETTING_ARGS"] = "Error getting deployment transaction args";
8
+ AddOrderErrors["ERROR_GETTING_NETWORK_KEY"] = "Error getting network key";
9
+ })(AddOrderErrors || (AddOrderErrors = {}));
10
+ export async function handleDeployment(gui, account, subgraphUrl) {
11
+ const networkKeyResult = gui.getNetworkKey();
12
+ if (networkKeyResult.error) {
13
+ throw new Error(AddOrderErrors.ERROR_GETTING_NETWORK_KEY);
14
+ }
15
+ const network = networkKeyResult.value;
16
+ if (!account) {
17
+ throw new Error(AddOrderErrors.NO_ACCOUNT_CONNECTED);
18
+ }
19
+ const result = await gui.getDeploymentTransactionArgs(account);
20
+ if (result.error) {
21
+ throw new Error(result.error.msg);
22
+ }
23
+ const { approvals, deploymentCalldata, orderbookAddress, chainId } = result.value;
24
+ return {
25
+ approvals,
26
+ deploymentCalldata,
27
+ // Cast to Hex, since js_api returns a string
28
+ orderbookAddress: orderbookAddress,
29
+ chainId,
30
+ network,
31
+ subgraphUrl
32
+ };
33
+ }
@@ -10,18 +10,22 @@ import ButtonVaultLink from "../ButtonVaultLink.svelte";
10
10
  import OrderVaultsVolTable from "../tables/OrderVaultsVolTable.svelte";
11
11
  import { QKEY_ORDER } from "../../queries/keys";
12
12
  import CodeMirrorRainlang from "../CodeMirrorRainlang.svelte";
13
- import { getOrderByHash } from "@rainlanguage/orderbook/js_api";
14
13
  import { createQuery, useQueryClient } from "@tanstack/svelte-query";
15
14
  import { Button, TabItem, Tabs, Tooltip } from "flowbite-svelte";
16
15
  import { onDestroy } from "svelte";
17
16
  import OrderApy from "../tables/OrderAPY.svelte";
18
17
  import { page } from "$app/stores";
19
- import DepositOrWithdrawButtons from "./DepositOrWithdrawButtons.svelte";
20
18
  import Refresh from "../icon/Refresh.svelte";
21
- import { invalidateIdQuery } from "../../queries/queryClient";
22
- import { InfoCircleOutline } from "flowbite-svelte-icons";
23
- export let handleDepositOrWithdrawModal = void 0;
24
- export let handleOrderRemoveModal = void 0;
19
+ import { invalidateTanstackQueries } from "../../queries/queryClient";
20
+ import {
21
+ ArrowDownToBracketOutline,
22
+ ArrowUpFromBracketOutline,
23
+ InfoCircleOutline
24
+ } from "flowbite-svelte-icons";
25
+ import { useAccount } from "../../providers/wallet/useAccount";
26
+ import {
27
+ getOrderByHash
28
+ } from "@rainlanguage/orderbook";
25
29
  export let handleQuoteDebugModal = void 0;
26
30
  export const handleDebugTradeModal = void 0;
27
31
  export let colorTheme;
@@ -31,12 +35,13 @@ export let orderbookAddress;
31
35
  export let orderHash;
32
36
  export let rpcUrl;
33
37
  export let subgraphUrl;
34
- export let chainId;
35
- export let wagmiConfig = void 0;
36
- export let signerAddress = void 0;
38
+ export let onRemove;
39
+ export let onDeposit;
40
+ export let onWithdraw;
37
41
  let codeMirrorDisabled = true;
38
42
  let codeMirrorStyles = {};
39
43
  const queryClient = useQueryClient();
44
+ const { matchesAccount } = useAccount();
40
45
  $: orderDetailQuery = createQuery({
41
46
  queryKey: [orderHash, QKEY_ORDER + orderHash],
42
47
  queryFn: () => {
@@ -45,7 +50,7 @@ $: orderDetailQuery = createQuery({
45
50
  enabled: !!subgraphUrl
46
51
  });
47
52
  const interval = setInterval(async () => {
48
- await invalidateIdQuery(queryClient, orderHash);
53
+ await invalidateTanstackQueries(queryClient, [orderHash]);
49
54
  }, 1e4);
50
55
  onDestroy(() => {
51
56
  clearInterval(interval);
@@ -63,33 +68,23 @@ $: subgraphName = $page.url.pathname.split("/")[2]?.split("-")[0];
63
68
  <span class="font-light">Order</span>
64
69
  <Hash shorten value={data.order.orderHash} />
65
70
  </div>
66
-
67
71
  <BadgeActive active={data.order.active} large />
68
72
  </div>
69
73
 
70
74
  <div class="flex items-center gap-2">
71
- {#if data && $signerAddress === data.order.owner && data.order.active && handleOrderRemoveModal && $wagmiConfig && chainId && orderbookAddress}
72
- <Button
73
- data-testid="remove-button"
74
- color="dark"
75
- on:click={() =>
76
- handleOrderRemoveModal({
77
- open: true,
78
- args: {
79
- order: data.order,
80
- onRemove: $orderDetailQuery.refetch,
81
- chainId,
82
- orderbookAddress,
83
- subgraphUrl
84
- }
85
- })}
86
- disabled={!handleOrderRemoveModal}
87
- >
88
- Remove
89
- </Button>
75
+ {#if matchesAccount(data.order.owner)}
76
+ {#if data.order.active}
77
+ <Button
78
+ on:click={() => onRemove(data.order)}
79
+ data-testid="remove-button"
80
+ aria-label="Remove order">Remove</Button
81
+ >
82
+ {/if}
90
83
  {/if}
84
+
91
85
  <Refresh
92
- on:click={async () => await invalidateIdQuery(queryClient, orderHash)}
86
+ testId="top-refresh"
87
+ on:click={() => invalidateTanstackQueries(queryClient, [orderHash])}
93
88
  spin={$orderDetailQuery.isLoading || $orderDetailQuery.isFetching}
94
89
  />
95
90
  </div>
@@ -118,7 +113,7 @@ $: subgraphName = $page.url.pathname.split("/")[2]?.split("-")[0];
118
113
  </svelte:fragment>
119
114
  </CardProperty>
120
115
 
121
- {#each [{ key: 'Input vaults', type: 'inputs' }, { key: 'Output vaults', type: 'outputs' }, { key: 'Input & output vaults', type: 'inputs_outputs' }] as { key, type }}
116
+ {#each [{ key: 'Output vaults', type: 'outputs' }, { key: 'Input vaults', type: 'inputs' }, { key: 'Input & output vaults', type: 'inputs_outputs' }] as { key, type }}
122
117
  {#if data.vaults.get(type)?.length !== 0}
123
118
  <CardProperty>
124
119
  <svelte:fragment slot="key"
@@ -135,15 +130,25 @@ $: subgraphName = $page.url.pathname.split("/")[2]?.split("-")[0];
135
130
  {#each data.vaults.get(type) || [] as vault}
136
131
  <ButtonVaultLink tokenVault={vault} {subgraphName}>
137
132
  <svelte:fragment slot="buttons">
138
- {#if handleDepositOrWithdrawModal && $signerAddress === vault.owner && chainId}
139
- <DepositOrWithdrawButtons
140
- {vault}
141
- {chainId}
142
- {rpcUrl}
143
- query={orderDetailQuery}
144
- {handleDepositOrWithdrawModal}
145
- {subgraphUrl}
146
- />
133
+ {#if matchesAccount(vault.owner)}
134
+ <div class="flex gap-1">
135
+ <Button
136
+ color="light"
137
+ size="xs"
138
+ data-testid="deposit-button"
139
+ on:click={() => onDeposit(vault)}
140
+ >
141
+ <ArrowDownToBracketOutline size="xs" />
142
+ </Button>
143
+ <Button
144
+ color="light"
145
+ size="xs"
146
+ data-testid="withdraw-button"
147
+ on:click={() => onWithdraw(vault)}
148
+ >
149
+ <ArrowUpFromBracketOutline size="xs" />
150
+ </Button>
151
+ </div>
147
152
  {/if}
148
153
  </svelte:fragment>
149
154
  </ButtonVaultLink>
@@ -1,12 +1,9 @@
1
1
  import { SvelteComponent } from "svelte";
2
- import type { Writable } from 'svelte/store';
3
- import type { Config } from 'wagmi';
4
2
  import type { Hex } from 'viem';
5
- import type { DepositOrWithdrawModalProps, OrderRemoveModalProps, QuoteDebugModalHandler, DebugTradeModalHandler } from '../../types/modal';
3
+ import type { QuoteDebugModalHandler, DebugTradeModalHandler } from '../../types/modal';
4
+ import { type SgOrder, type SgVault } from '@rainlanguage/orderbook';
6
5
  declare const __propDef: {
7
6
  props: {
8
- handleDepositOrWithdrawModal?: ((props: DepositOrWithdrawModalProps) => void) | undefined;
9
- handleOrderRemoveModal?: ((props: OrderRemoveModalProps) => void) | undefined;
10
7
  handleQuoteDebugModal?: QuoteDebugModalHandler | undefined;
11
8
  handleDebugTradeModal?: DebugTradeModalHandler | undefined;
12
9
  colorTheme: any;
@@ -16,9 +13,15 @@ declare const __propDef: {
16
13
  orderHash: string;
17
14
  rpcUrl: string;
18
15
  subgraphUrl: string;
19
- chainId: number | undefined;
20
- wagmiConfig?: Writable<Config> | undefined;
21
- signerAddress?: Writable<string | null> | undefined;
16
+ /** Callback function when remove action is triggered for an order
17
+ * @param order The order to remove
18
+ */ onRemove: (order: SgOrder) => void;
19
+ /** Callback function when deposit action is triggered for a vault
20
+ * @param vault The vault to deposit into
21
+ */ onDeposit: (vault: SgVault) => void;
22
+ /** Callback function when withdraw action is triggered for a vault
23
+ * @param vault The vault to withdraw from
24
+ */ onWithdraw: (vault: SgVault) => void;
22
25
  };
23
26
  events: {
24
27
  [evt: string]: CustomEvent<any>;
@@ -1,7 +1,7 @@
1
- <script generics="T">import { invalidateIdQuery } from "../../queries/queryClient";
1
+ <script generics="T">import { invalidateTanstackQueries } from "../../queries/queryClient";
2
2
  import Refresh from "../icon/Refresh.svelte";
3
3
  import EditableSpan from "../EditableSpan.svelte";
4
- import { getOrderQuote } from "@rainlanguage/orderbook/quote";
4
+ import { getOrderQuote } from "@rainlanguage/orderbook";
5
5
  import { QKEY_ORDER_QUOTE } from "../../queries/keys";
6
6
  import { formatUnits, hexToNumber, isHex } from "viem";
7
7
  import { createQuery, useQueryClient } from "@tanstack/svelte-query";
@@ -11,10 +11,10 @@ import {
11
11
  TableBodyCell,
12
12
  TableBodyRow,
13
13
  TableHead,
14
- TableHeadCell,
15
- Tooltip
14
+ TableHeadCell
16
15
  } from "flowbite-svelte";
17
16
  import { BugOutline, PauseSolid, PlaySolid } from "flowbite-svelte-icons";
17
+ import Tooltip from "../Tooltip.svelte";
18
18
  export let id;
19
19
  export let order;
20
20
  export let rpcUrl;
@@ -23,7 +23,7 @@ export let handleQuoteDebugModal = void 0;
23
23
  let enabled = true;
24
24
  const queryClient = useQueryClient();
25
25
  const refreshQuotes = async () => {
26
- await invalidateIdQuery(queryClient, id);
26
+ invalidateTanstackQueries(queryClient, [id, QKEY_ORDER_QUOTE + id]);
27
27
  };
28
28
  $: orderQuoteQuery = createQuery({
29
29
  queryKey: [id, QKEY_ORDER_QUOTE + id],
@@ -36,7 +36,7 @@ $: orderModalArg = order;
36
36
 
37
37
  <div class="mt-4">
38
38
  <div class="mb-4 flex items-center justify-between">
39
- <h2 class="text-lg font-semibold">Order Quotes</h2>
39
+ <h2 class="text-lg font-semibold">Order quotes</h2>
40
40
  <div class="flex items-center gap-x-1">
41
41
  {#if $orderQuoteQuery.data && $orderQuoteQuery.data.length > 0 && isHex($orderQuoteQuery.data[0].blockNumber)}
42
42
  <EditableSpan
@@ -1,6 +1,6 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import type { Hex } from 'viem';
3
- import type { SgOrder } from '@rainlanguage/orderbook/js_api';
3
+ import type { SgOrder } from '@rainlanguage/orderbook';
4
4
  declare class __sveltets_Render<T> {
5
5
  props(): {
6
6
  id: string;
@@ -1,37 +1,32 @@
1
- <script>import { Button } from "flowbite-svelte";
2
- import { bigintStringToHex } from "../../utils/hex";
1
+ <script>import { bigintStringToHex } from "../../utils/hex";
3
2
  import Hash, { HashType } from "../Hash.svelte";
4
3
  import VaultBalanceChangesTable from "../tables/VaultBalanceChangesTable.svelte";
5
4
  import VaultBalanceChart from "../charts/VaultBalanceChart.svelte";
6
5
  import TanstackPageContentDetail from "./TanstackPageContentDetail.svelte";
7
6
  import CardProperty from "../CardProperty.svelte";
8
7
  import { QKEY_VAULT } from "../../queries/keys";
9
- import { getVault } from "@rainlanguage/orderbook/js_api";
8
+ import { getVault } from "@rainlanguage/orderbook";
10
9
  import { formatUnits } from "viem";
11
10
  import { createQuery } from "@tanstack/svelte-query";
12
11
  import { onDestroy } from "svelte";
13
12
  import { useQueryClient } from "@tanstack/svelte-query";
14
- import { ArrowDownOutline, ArrowUpOutline } from "flowbite-svelte-icons";
15
13
  import OrderOrVaultHash from "../OrderOrVaultHash.svelte";
16
- import DepositOrWithdrawButtons from "./DepositOrWithdrawButtons.svelte";
17
14
  import Refresh from "../icon/Refresh.svelte";
18
- import { invalidateIdQuery } from "../../queries/queryClient";
19
- export let handleDepositOrWithdrawModal = void 0;
15
+ import { invalidateTanstackQueries } from "../../queries/queryClient";
16
+ import { useAccount } from "../../providers/wallet/useAccount";
17
+ import { Button } from "flowbite-svelte";
18
+ import { ArrowDownToBracketOutline, ArrowUpFromBracketOutline } from "flowbite-svelte-icons";
20
19
  export let id;
21
20
  export let network;
22
- export let walletAddressMatchesOrBlank = void 0;
23
- export let handleDepositModal = void 0;
24
- export let handleWithdrawModal = void 0;
25
21
  export let lightweightChartsTheme = void 0;
26
22
  export let activeNetworkRef;
27
23
  export let activeOrderbookRef;
28
24
  export let settings;
29
- export let wagmiConfig = void 0;
30
- export let signerAddress = void 0;
25
+ export let onDeposit;
26
+ export let onWithdraw;
31
27
  const subgraphUrl = $settings?.subgraphs?.[network] || "";
32
- const chainId = $settings?.networks?.[network]?.["chain-id"] || 0;
33
- const rpcUrl = $settings?.networks?.[network]?.["rpc"] || "";
34
28
  const queryClient = useQueryClient();
29
+ const { matchesAccount } = useAccount();
35
30
  $: vaultDetailQuery = createQuery({
36
31
  queryKey: [id, QKEY_VAULT + id],
37
32
  queryFn: () => {
@@ -44,11 +39,7 @@ const updateActiveNetworkAndOrderbook = (subgraphName) => {
44
39
  activeOrderbookRef.set(subgraphName);
45
40
  };
46
41
  const interval = setInterval(async () => {
47
- await queryClient.invalidateQueries({
48
- queryKey: [id],
49
- refetchType: "active",
50
- exact: false
51
- });
42
+ invalidateTanstackQueries(queryClient, [id, QKEY_VAULT + id]);
52
43
  }, 5e3);
53
44
  onDestroy(() => {
54
45
  clearInterval(interval);
@@ -64,32 +55,30 @@ onDestroy(() => {
64
55
  {data.token.name}
65
56
  </div>
66
57
  <div class="flex items-center gap-2">
67
- {#if $wagmiConfig && handleDepositOrWithdrawModal && $signerAddress === data.owner}
68
- <DepositOrWithdrawButtons
69
- vault={data}
70
- {chainId}
71
- {rpcUrl}
72
- query={vaultDetailQuery}
73
- {handleDepositOrWithdrawModal}
74
- {subgraphUrl}
75
- />
76
- {:else if handleDepositModal && handleWithdrawModal && $walletAddressMatchesOrBlank?.(data.owner)}
58
+ {#if matchesAccount(data.owner)}
77
59
  <Button
78
- data-testid="vaultDetailDepositButton"
79
- color="dark"
80
- on:click={() => handleDepositModal(data, $vaultDetailQuery.refetch)}
81
- ><ArrowDownOutline size="xs" class="mr-2" />Deposit</Button
60
+ color="light"
61
+ size="xs"
62
+ data-testid="deposit-button"
63
+ aria-label="Deposit to vault"
64
+ on:click={() => onDeposit(data)}
82
65
  >
66
+ <ArrowDownToBracketOutline size="xs" />
67
+ </Button>
83
68
  <Button
84
- data-testid="vaultDetailWithdrawButton"
85
- color="dark"
86
- on:click={() => handleWithdrawModal(data, $vaultDetailQuery.refetch)}
87
- ><ArrowUpOutline size="xs" class="mr-2" />Withdraw</Button
69
+ color="light"
70
+ size="xs"
71
+ data-testid="withdraw-button"
72
+ aria-label="Withdraw from vault"
73
+ on:click={() => onWithdraw(data)}
88
74
  >
75
+ <ArrowUpFromBracketOutline size="xs" />
76
+ </Button>
89
77
  {/if}
90
78
 
91
79
  <Refresh
92
- on:click={async () => await invalidateIdQuery(queryClient, id)}
80
+ testId="top-refresh"
81
+ on:click={() => invalidateTanstackQueries(queryClient, [id, QKEY_VAULT + id])}
93
82
  spin={$vaultDetailQuery.isLoading || $vaultDetailQuery.isFetching}
94
83
  />
95
84
  </div>
@@ -108,7 +97,7 @@ onDestroy(() => {
108
97
  </CardProperty>
109
98
 
110
99
  <CardProperty data-testid="vaultDetailOwnerAddress">
111
- <svelte:fragment slot="key">Owner Address</svelte:fragment>
100
+ <svelte:fragment slot="key">Owner address</svelte:fragment>
112
101
  <svelte:fragment slot="value">
113
102
  <Hash type={HashType.Wallet} value={data.owner} />
114
103
  </svelte:fragment>
@@ -152,7 +141,7 @@ onDestroy(() => {
152
141
  <CardProperty>
153
142
  <svelte:fragment slot="key">Orders as output</svelte:fragment>
154
143
  <svelte:fragment slot="value">
155
- <p data-testid="vaulDetailOrdersAsOutput" class="flex flex-wrap justify-start">
144
+ <p data-testid="vaultDetailOrdersAsOutput" class="flex flex-wrap justify-start">
156
145
  {#if data.ordersAsOutput && data.ordersAsOutput.length > 0}
157
146
  {#each data.ordersAsOutput as order}
158
147
  <OrderOrVaultHash
@@ -1,24 +1,24 @@
1
1
  import { SvelteComponent } from "svelte";
2
+ import { type SgVault } from '@rainlanguage/orderbook';
2
3
  import type { ChartTheme } from '../../utils/lightweightChartsThemes';
3
- import type { Readable, Writable } from 'svelte/store';
4
- import type { SgVault } from '@rainlanguage/orderbook/js_api';
4
+ import type { Readable } from 'svelte/store';
5
5
  import type { AppStoresInterface } from '../../types/appStores';
6
- import type { Config } from 'wagmi';
7
- import type { DepositOrWithdrawModalProps } from '../../types/modal';
8
6
  declare const __propDef: {
9
7
  props: {
10
- handleDepositOrWithdrawModal?: ((args: DepositOrWithdrawModalProps) => void) | undefined;
11
8
  id: string;
12
9
  network: string;
13
- walletAddressMatchesOrBlank?: Readable<(otherAddress: string) => boolean> | undefined;
14
- handleDepositModal?: ((vault: SgVault, onDeposit: () => void) => void) | undefined;
15
- handleWithdrawModal?: ((vault: SgVault, onWithdraw: () => void) => void) | undefined;
16
10
  lightweightChartsTheme?: Readable<ChartTheme> | undefined;
17
11
  activeNetworkRef: AppStoresInterface["activeNetworkRef"];
18
12
  activeOrderbookRef: AppStoresInterface["activeOrderbookRef"];
19
13
  settings: any;
20
- wagmiConfig?: Writable<Config> | undefined;
21
- signerAddress?: Writable<string | null> | undefined;
14
+ /**
15
+ * Required callback function when deposit action is triggered for a vault
16
+ * @param vault The vault to deposit into
17
+ */ onDeposit: (vault: SgVault) => void;
18
+ /**
19
+ * Required callback function when withdraw action is triggered for a vault
20
+ * @param vault The vault to withdraw from
21
+ */ onWithdraw: (vault: SgVault) => void;
22
22
  };
23
23
  events: {
24
24
  [evt: string]: CustomEvent<any>;
@@ -1,6 +1,6 @@
1
1
  import { SvelteComponent } from "svelte";
2
2
  import type { Writable } from 'svelte/store';
3
- import type { ConfigSource } from '@rainlanguage/orderbook/js_api';
3
+ import type { ConfigSource } from '@rainlanguage/orderbook';
4
4
  declare const __propDef: {
5
5
  props: {
6
6
  settings: ConfigSource;
@@ -12,10 +12,11 @@ export let size = ctx.size || "md";
12
12
  export let role = ctx.role || "img";
13
13
  export let ariaLabel = "refresh";
14
14
  export let spin = false;
15
+ export let testId = "refresh-button";
15
16
  </script>
16
17
 
17
18
  <svg
18
- data-testid="refresh-button"
19
+ data-testid={testId}
19
20
  xmlns="http://www.w3.org/2000/svg"
20
21
  fill="none"
21
22
  {...$$restProps}
@@ -7,6 +7,7 @@ declare const __propDef: {
7
7
  role?: AriaRole | undefined;
8
8
  ariaLabel?: string | undefined;
9
9
  spin?: boolean | undefined;
10
+ testId?: string | undefined;
10
11
  };
11
12
  events: {
12
13
  click: MouseEvent;
@@ -9,7 +9,7 @@ function handleChange(event) {
9
9
  </script>
10
10
 
11
11
  <div data-testid="order-hash-input" class="flex flex-col gap-x-2">
12
- <Label>Order Hash</Label>
12
+ <Label>Order hash</Label>
13
13
  <div class="w-full lg:w-32">
14
14
  <input
15
15
  type="text"
@@ -7,12 +7,12 @@ const loadRegistryUrl = () => {
7
7
  };
8
8
  </script>
9
9
 
10
- <div class="flex w-full items-start gap-4">
10
+ <div class="mb-4 flex w-full items-start gap-4">
11
11
  <Input
12
12
  id="strategy-url"
13
13
  type="url"
14
14
  placeholder="Enter URL to raw strategy registry file"
15
15
  bind:value={newRegistryUrl}
16
16
  />
17
- <Button class="text-nowrap" on:click={loadRegistryUrl}>Load Registry URL</Button>
17
+ <Button class="text-nowrap" on:click={loadRegistryUrl}>Load registry URL</Button>
18
18
  </div>
@@ -35,10 +35,10 @@ function decimalsComplete({ detail }) {
35
35
  </div>
36
36
 
37
37
  {#if !isAddressValid && address.length > 0}
38
- <Helper class="mt-2 text-sm" color="red">Invalid Address</Helper>
38
+ <Helper class="mt-2 text-sm" color="red">Invalid address</Helper>
39
39
  {/if}
40
40
 
41
- <Helper class="mt-2 text-sm">Token Address</Helper>
41
+ <Helper class="mt-2 text-sm">Token address</Helper>
42
42
  </div>
43
43
  <div class="w-32 grow-0 break-all" data-testid="token-decimals-input">
44
44
  <input
@@ -39,7 +39,7 @@ function fillMaxValue() {
39
39
  />
40
40
 
41
41
  {#if maxValue}
42
- <div class="absolute right-4 flex h-10 flex-col justify-center">
42
+ <div class="absolute right-2 flex h-10 flex-col justify-center">
43
43
  <Button color="blue" class="px-2 py-1" size="xs" pill on:click={fillMaxValue}>MAX</Button>
44
44
  </div>
45
45
  {/if}
@@ -1,7 +1,7 @@
1
1
  <script>import { createInfiniteQuery } from "@tanstack/svelte-query";
2
2
  import TanstackAppTable from "../TanstackAppTable.svelte";
3
3
  import { QKEY_ORDER_APY } from "../../queries/keys";
4
- import { getOrderPerformance } from "@rainlanguage/orderbook/js_api";
4
+ import { getOrderPerformance } from "@rainlanguage/orderbook";
5
5
  import { TableBodyCell, TableHeadCell } from "flowbite-svelte";
6
6
  import ApyTimeFilters from "../charts/APYTimeFilters.svelte";
7
7
  import { bigintStringToPercentage } from "../../utils/number";