@0xsequence/marketplace-sdk 0.7.0 → 0.8.1

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 (227) hide show
  1. package/.changeset/README.md +8 -0
  2. package/.changeset/config.json +11 -0
  3. package/.changeset/seven-doors-taste.md +5 -0
  4. package/CHANGELOG.md +13 -0
  5. package/dist/{chunk-MPBN3E54.js → chunk-2VHHJNXY.js} +3 -3
  6. package/dist/{chunk-FBUMNJQ4.js → chunk-3II5GLHE.js} +2 -2
  7. package/dist/chunk-3JU7SQVE.js +182 -0
  8. package/dist/chunk-3JU7SQVE.js.map +1 -0
  9. package/dist/{chunk-XTGMMNV5.js → chunk-A5ACY5YV.js} +2 -2
  10. package/dist/chunk-ABSYNRT5.js +128 -0
  11. package/dist/chunk-ABSYNRT5.js.map +1 -0
  12. package/dist/{chunk-XNA64MZQ.js → chunk-BCO4CYE4.js} +2 -2
  13. package/dist/{chunk-HTFORA4Q.js → chunk-BN36GABQ.js} +1883 -1010
  14. package/dist/chunk-BN36GABQ.js.map +1 -0
  15. package/dist/{chunk-4XK7XNJ7.js → chunk-BNAUZXPV.js} +73 -2
  16. package/dist/chunk-BNAUZXPV.js.map +1 -0
  17. package/dist/{chunk-Q5URKSC4.js → chunk-FMEEJFAF.js} +1 -1
  18. package/dist/{chunk-BBASZVT3.js → chunk-GBQVYNCD.js} +5 -6
  19. package/dist/chunk-GBQVYNCD.js.map +1 -0
  20. package/dist/{chunk-3AKOPSON.js → chunk-IZ44XPBH.js} +2 -9
  21. package/dist/chunk-IZ44XPBH.js.map +1 -0
  22. package/dist/{chunk-EAJ5K7QV.js → chunk-Q5RKAMYF.js} +3 -4
  23. package/dist/chunk-Q5RKAMYF.js.map +1 -0
  24. package/dist/{chunk-RBEPPVLT.js → chunk-X3QNSQER.js} +145 -355
  25. package/dist/chunk-X3QNSQER.js.map +1 -0
  26. package/dist/{index-CzTANLaA.d.ts → index-CnaFSNE9.d.ts} +6 -7
  27. package/dist/index.css +113 -31
  28. package/dist/index.css.map +1 -1
  29. package/dist/index.d.ts +2 -4
  30. package/dist/index.js +4 -4
  31. package/dist/listCollectibles-B0tbqnRd.d.ts +155 -0
  32. package/dist/react/_internal/api/index.d.ts +28 -2
  33. package/dist/react/_internal/api/index.js +3 -1
  34. package/dist/react/_internal/databeat/index.js +10 -9
  35. package/dist/react/_internal/index.d.ts +2 -3
  36. package/dist/react/_internal/index.js +4 -4
  37. package/dist/react/_internal/wagmi/index.js +2 -2
  38. package/dist/react/hooks/index.d.ts +259 -674
  39. package/dist/react/hooks/index.js +11 -20
  40. package/dist/react/hooks/options/index.d.ts +1 -2
  41. package/dist/react/hooks/options/index.js +4 -4
  42. package/dist/react/index.d.ts +7 -7
  43. package/dist/react/index.js +15 -24
  44. package/dist/react/queries/index.d.ts +25 -0
  45. package/dist/react/queries/index.js +48 -0
  46. package/dist/react/queries/index.js.map +1 -0
  47. package/dist/react/ssr/index.js +3 -3
  48. package/dist/react/ui/components/collectible-card/index.d.ts +1 -6
  49. package/dist/react/ui/components/collectible-card/index.js +13 -12
  50. package/dist/react/ui/components/marketplace-logos/index.js +1 -1
  51. package/dist/react/ui/icons/index.js +6 -6
  52. package/dist/react/ui/index.d.ts +18 -22
  53. package/dist/react/ui/index.js +13 -12
  54. package/dist/react/ui/modals/_internal/components/actionModal/index.d.ts +6 -11
  55. package/dist/react/ui/modals/_internal/components/actionModal/index.js +10 -9
  56. package/dist/types/index.js +2 -2
  57. package/dist/{types-Ct1uCT3M.d.ts → types-o_pKUpQG.d.ts} +2 -5
  58. package/dist/utils/index.d.ts +1 -5
  59. package/dist/utils/index.js +4 -4
  60. package/package.json +22 -16
  61. package/src/react/_internal/api/__mocks__/indexer.msw.ts +3 -1
  62. package/src/react/_internal/api/__mocks__/marketplace.msw.ts +1 -1
  63. package/src/react/_internal/api/__mocks__/metadata.msw.ts +14 -12
  64. package/src/react/_internal/api/index.ts +1 -0
  65. package/src/react/_internal/api/laos-api.ts +103 -0
  66. package/src/react/_internal/api/zod-schema.ts +3 -3
  67. package/src/react/_internal/types.ts +1 -10
  68. package/src/react/_internal/wallet/__tests__/wallet.test.ts +43 -0
  69. package/src/react/_internal/wallet/useWallet.ts +6 -3
  70. package/src/react/hooks/__tests__/useAutoSelectFeeOption.test.tsx +1 -1
  71. package/src/react/hooks/__tests__/useCancelOrder.test.tsx +1 -1
  72. package/src/react/hooks/__tests__/useCancelTransactionSteps.test.tsx +1 -1
  73. package/src/react/hooks/__tests__/useCollectible.test.tsx +2 -2
  74. package/src/react/hooks/__tests__/useCollection.test.tsx +2 -2
  75. package/src/react/hooks/__tests__/useComparePrices.test.tsx +1 -1
  76. package/src/react/hooks/__tests__/useConvertPriceToUSD.test.tsx +1 -1
  77. package/src/react/hooks/__tests__/useCountListingsForCollectible.test.tsx +1 -1
  78. package/src/react/hooks/__tests__/useCountOfCollectables.test.tsx +2 -2
  79. package/src/react/hooks/__tests__/useCountOffersForCollectible.test.tsx +1 -1
  80. package/src/react/hooks/__tests__/useCurrencies.test.tsx +2 -2
  81. package/src/react/hooks/__tests__/useCurrency.test.tsx +2 -2
  82. package/src/react/hooks/__tests__/useFilters.test.tsx +2 -2
  83. package/src/react/hooks/__tests__/useFloorOrder.test.tsx +2 -2
  84. package/src/react/hooks/__tests__/useGenerateCancelTransaction.test.tsx +1 -1
  85. package/src/react/hooks/__tests__/useGenerateListingTransaction.test.tsx +1 -1
  86. package/src/react/hooks/__tests__/useGenerateOfferTransaction.test.tsx +1 -1
  87. package/src/react/hooks/__tests__/useGenerateSellTransaction.test.tsx +1 -1
  88. package/src/react/hooks/__tests__/useListCollectibleActivities.test.tsx +2 -2
  89. package/src/react/hooks/__tests__/useListCollectibles.test.tsx +3 -2
  90. package/src/react/hooks/__tests__/useListCollectiblesPaginated.test.tsx +1 -1
  91. package/src/react/hooks/__tests__/useListCollectionActivities.test.tsx +1 -1
  92. package/src/react/hooks/__tests__/useListListingsForCollectible.test.tsx +1 -1
  93. package/src/react/hooks/__tests__/useListOffersForCollectible.test.tsx +1 -1
  94. package/src/react/hooks/__tests__/useLowestListing.test.tsx +1 -1
  95. package/src/react/hooks/__tests__/useRoyalty.test.tsx +1 -2
  96. package/src/react/hooks/index.ts +0 -1
  97. package/src/react/hooks/options/collectionOptions.ts +2 -3
  98. package/src/react/hooks/useAutoSelectFeeOption.tsx +1 -1
  99. package/src/react/hooks/useCancelOrder.tsx +3 -3
  100. package/src/react/hooks/useCancelTransactionSteps.tsx +1 -1
  101. package/src/react/hooks/useCheckoutOptions.tsx +1 -2
  102. package/src/react/hooks/useCollectible.tsx +2 -3
  103. package/src/react/hooks/useCollectionBalanceDetails.tsx +1 -2
  104. package/src/react/hooks/useComparePrices.tsx +2 -9
  105. package/src/react/hooks/useConvertPriceToUSD.tsx +1 -4
  106. package/src/react/hooks/useCountListingsForCollectible.tsx +1 -2
  107. package/src/react/hooks/useCountOfCollectables.tsx +1 -2
  108. package/src/react/hooks/useCountOffersForCollectible.tsx +1 -2
  109. package/src/react/hooks/useCurrencies.tsx +1 -4
  110. package/src/react/hooks/useCurrency.tsx +3 -8
  111. package/src/react/hooks/useFilters.tsx +5 -4
  112. package/src/react/hooks/useFloorOrder.tsx +1 -2
  113. package/src/react/hooks/useGenerateCancelTransaction.tsx +3 -6
  114. package/src/react/hooks/useGenerateListingTransaction.tsx +2 -3
  115. package/src/react/hooks/useGenerateOfferTransaction.tsx +2 -3
  116. package/src/react/hooks/useGenerateSellTransaction.tsx +3 -6
  117. package/src/react/hooks/useHighestOffer.tsx +1 -1
  118. package/src/react/hooks/useListCollectibles.tsx +33 -61
  119. package/src/react/hooks/useListCollectiblesPaginated.tsx +2 -6
  120. package/src/react/hooks/useListListingsForCollectible.tsx +1 -2
  121. package/src/react/hooks/useListOffersForCollectible.tsx +1 -2
  122. package/src/react/hooks/useLowestListing.tsx +1 -2
  123. package/src/react/hooks/useRoyalty.tsx +3 -8
  124. package/src/react/hooks/useTransferTokens.tsx +2 -2
  125. package/src/react/queries/balanceOfCollectible.ts +9 -32
  126. package/src/react/queries/getTokenSupplies.ts +38 -0
  127. package/src/react/queries/index.ts +5 -0
  128. package/src/react/queries/listCollectibles.ts +96 -0
  129. package/src/react/ui/components/_internals/action-button/ActionButton.tsx +1 -1
  130. package/src/react/ui/components/_internals/action-button/__tests__/ActionButton.test.tsx +1 -1
  131. package/src/react/ui/components/_internals/action-button/components/NonOwnerActions.tsx +4 -3
  132. package/src/react/ui/components/_internals/action-button/components/OwnerActions.tsx +1 -1
  133. package/src/react/ui/components/collectible-card/CollectibleCard.tsx +2 -3
  134. package/src/react/ui/components/collectible-card/__tests__/CollectibleCard.test.tsx +1 -1
  135. package/src/react/ui/modals/BuyModal/ERC1155QuantityModal.tsx +127 -0
  136. package/src/react/ui/modals/BuyModal/Modal.tsx +70 -85
  137. package/src/react/ui/modals/BuyModal/__tests__/Modal.test.tsx +85 -226
  138. package/src/react/ui/modals/BuyModal/__tests__/Modal1155.test.tsx +140 -0
  139. package/src/react/ui/modals/BuyModal/__tests__/store.test.ts +67 -76
  140. package/src/react/ui/modals/BuyModal/hooks/__tests__/useCheckoutOptions.test.tsx +1 -60
  141. package/src/react/ui/modals/BuyModal/hooks/__tests__/useFees.test.tsx +1 -1
  142. package/src/react/ui/modals/BuyModal/hooks/useCheckoutOptions.ts +29 -13
  143. package/src/react/ui/modals/BuyModal/hooks/useLoadData.ts +26 -21
  144. package/src/react/ui/modals/BuyModal/hooks/usePaymentModalParams.ts +200 -0
  145. package/src/react/ui/modals/BuyModal/index.tsx +4 -14
  146. package/src/react/ui/modals/BuyModal/store.ts +71 -76
  147. package/src/react/ui/modals/CreateListingModal/Modal.tsx +71 -7
  148. package/src/react/ui/modals/CreateListingModal/__tests__/Modal.test.tsx +2 -2
  149. package/src/react/ui/modals/CreateListingModal/hooks/useCreateListing.tsx +1 -1
  150. package/src/react/ui/modals/CreateListingModal/hooks/useGetTokenApproval.ts +1 -1
  151. package/src/react/ui/modals/CreateListingModal/hooks/useTransactionSteps.tsx +9 -5
  152. package/src/react/ui/modals/CreateListingModal/store.ts +7 -2
  153. package/src/react/ui/modals/MakeOfferModal/Modal.tsx +103 -6
  154. package/src/react/ui/modals/MakeOfferModal/__tests__/Modal.test.tsx +1 -1
  155. package/src/react/ui/modals/MakeOfferModal/hooks/useGetTokenApproval.tsx +1 -1
  156. package/src/react/ui/modals/MakeOfferModal/hooks/useMakeOffer.tsx +1 -1
  157. package/src/react/ui/modals/MakeOfferModal/hooks/useTransactionSteps.tsx +8 -4
  158. package/src/react/ui/modals/MakeOfferModal/store.ts +5 -3
  159. package/src/react/ui/modals/SellModal/Modal.tsx +76 -4
  160. package/src/react/ui/modals/SellModal/__tests__/Modal.test.tsx +1 -1
  161. package/src/react/ui/modals/SellModal/hooks/useGetTokenApproval.tsx +1 -1
  162. package/src/react/ui/modals/SellModal/hooks/useSell.tsx +1 -1
  163. package/src/react/ui/modals/SellModal/hooks/useTransactionSteps.tsx +16 -8
  164. package/src/react/ui/modals/SellModal/store.ts +5 -3
  165. package/src/react/ui/modals/TransferModal/_store.ts +15 -3
  166. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TokenQuantityInput.tsx +58 -0
  167. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/TransferButton.tsx +56 -0
  168. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/_components/WalletAddressInput.tsx +50 -0
  169. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/index.tsx +94 -66
  170. package/src/react/ui/modals/TransferModal/_views/enterWalletAddress/useHandleTransfer.tsx +22 -14
  171. package/src/react/ui/modals/TransferModal/index.tsx +72 -38
  172. package/src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx +43 -42
  173. package/src/react/ui/modals/_internal/components/actionModal/store.ts +1 -2
  174. package/src/react/ui/modals/_internal/components/currencyOptionsSelect/index.tsx +2 -2
  175. package/src/react/ui/modals/_internal/components/expirationDateSelect/index.tsx +9 -1
  176. package/src/react/ui/modals/_internal/components/floorPriceText/index.tsx +27 -12
  177. package/src/react/ui/modals/_internal/components/priceInput/__tests__/index.test.tsx +1 -1
  178. package/src/react/ui/modals/_internal/components/priceInput/index.tsx +19 -3
  179. package/src/react/ui/modals/_internal/components/quantityInput/index.tsx +3 -0
  180. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/_components/ActionButtons.tsx +60 -0
  181. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/_components/BalanceIndicator.tsx +30 -0
  182. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/index.tsx +126 -0
  183. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/store.ts +25 -0
  184. package/src/react/ui/modals/_internal/components/selectWaasFeeOptions/useWaasFeeOptionManager.tsx +74 -0
  185. package/src/react/ui/modals/_internal/components/switchChainModal/index.tsx +1 -2
  186. package/src/react/ui/modals/_internal/components/switchChainModal/store.ts +1 -2
  187. package/src/react/ui/modals/_internal/components/tokenPreview/index.tsx +1 -1
  188. package/src/react/ui/modals/_internal/components/transaction-footer/index.tsx +4 -7
  189. package/src/react/ui/modals/_internal/components/transactionDetails/index.tsx +1 -1
  190. package/src/react/ui/modals/_internal/components/transactionPreview/index.tsx +1 -1
  191. package/src/react/ui/modals/_internal/components/transactionStatusModal/__tests__/TransactionStatusModal.test.tsx +1 -1
  192. package/src/react/ui/modals/_internal/components/transactionStatusModal/hooks/useTransactionStatus.ts +1 -1
  193. package/src/react/ui/modals/_internal/components/transactionStatusModal/index.tsx +6 -1
  194. package/src/react/ui/modals/_internal/components/transactionStatusModal/store.ts +2 -2
  195. package/src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx +10 -31
  196. package/src/react/ui/modals/_internal/hooks/useSelectWaasFeeOptions.ts +53 -0
  197. package/src/react/ui/modals/_internal/types.ts +2 -1
  198. package/src/types/waas-types.ts +38 -0
  199. package/src/utils/network.ts +2 -4
  200. package/test/const.ts +1 -1
  201. package/test/setup.ts +10 -0
  202. package/test/test-utils.tsx +31 -5
  203. package/tsconfig.tsbuildinfo +1 -1
  204. package/dist/chunk-3AKOPSON.js.map +0 -1
  205. package/dist/chunk-4XK7XNJ7.js.map +0 -1
  206. package/dist/chunk-BBASZVT3.js.map +0 -1
  207. package/dist/chunk-EAJ5K7QV.js.map +0 -1
  208. package/dist/chunk-HTFORA4Q.js.map +0 -1
  209. package/dist/chunk-OFY7OFTL.js +0 -458
  210. package/dist/chunk-OFY7OFTL.js.map +0 -1
  211. package/dist/chunk-RBEPPVLT.js.map +0 -1
  212. package/src/react/hooks/__tests__/useGenerateBuyTransaction.test.tsx +0 -172
  213. package/src/react/hooks/useGenerateBuyTransaction.tsx +0 -80
  214. package/src/react/ui/modals/BuyModal/hooks/__tests__/useBuyCollectable.test.tsx +0 -349
  215. package/src/react/ui/modals/BuyModal/hooks/__tests__/useLoadData.test.tsx +0 -185
  216. package/src/react/ui/modals/BuyModal/hooks/useBuyCollectable.ts +0 -170
  217. package/src/react/ui/modals/BuyModal/modals/CheckoutModal.tsx +0 -47
  218. package/src/react/ui/modals/BuyModal/modals/Modal1155.tsx +0 -140
  219. package/src/react/ui/modals/BuyModal/modals/__tests__/CheckoutModal.test.tsx +0 -162
  220. package/src/react/ui/modals/BuyModal/modals/__tests__/Modal1155.test.tsx +0 -327
  221. package/src/react/ui/modals/_internal/components/waasFeeOptionsBox/index.tsx +0 -124
  222. package/src/react/ui/modals/_internal/components/waasFeeOptionsBox/store.ts +0 -12
  223. /package/dist/{chunk-MPBN3E54.js.map → chunk-2VHHJNXY.js.map} +0 -0
  224. /package/dist/{chunk-FBUMNJQ4.js.map → chunk-3II5GLHE.js.map} +0 -0
  225. /package/dist/{chunk-XTGMMNV5.js.map → chunk-A5ACY5YV.js.map} +0 -0
  226. /package/dist/{chunk-XNA64MZQ.js.map → chunk-BCO4CYE4.js.map} +0 -0
  227. /package/dist/{chunk-Q5URKSC4.js.map → chunk-FMEEJFAF.js.map} +0 -0
@@ -1,458 +0,0 @@
1
- 'use client';
2
-
3
- import {
4
- MODAL_CONTENT_PROPS,
5
- MODAL_OVERLAY_PROPS,
6
- useSwitchChainModal,
7
- useWallet
8
- } from "./chunk-RBEPPVLT.js";
9
-
10
- // src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx
11
- import { useState as useState2 } from "react";
12
- import { Button as Button3, Modal, Spinner, Text as Text4 } from "@0xsequence/design-system";
13
- import { observer as observer3 } from "@legendapp/state/react";
14
-
15
- // src/react/ui/modals/_internal/components/waasFeeOptionsBox/index.tsx
16
- import { useWaasFeeOptions } from "@0xsequence/connect";
17
- import { Button as Button2, Skeleton, Text as Text3, WarningIcon } from "@0xsequence/design-system";
18
- import { observer as observer2 } from "@legendapp/state/react";
19
- import { useEffect as useEffect2 } from "react";
20
- import { zeroAddress as zeroAddress3 } from "viem";
21
- import { useAccount } from "wagmi";
22
-
23
- // src/react/hooks/useCurrencyBalance.tsx
24
- import { skipToken, useQuery } from "@tanstack/react-query";
25
- import { erc20Abi, formatUnits, zeroAddress } from "viem";
26
- import { usePublicClient } from "wagmi";
27
- function useCurrencyBalance({
28
- currencyAddress,
29
- chainId,
30
- userAddress
31
- }) {
32
- const publicClient = usePublicClient({ chainId });
33
- return useQuery({
34
- queryKey: ["balance", currencyAddress, chainId, userAddress],
35
- queryFn: !!userAddress && !!chainId && !!currencyAddress && !!publicClient ? async () => {
36
- if (currencyAddress === zeroAddress) {
37
- const balance2 = await publicClient.getBalance({
38
- address: userAddress
39
- });
40
- return {
41
- value: balance2,
42
- formatted: formatUnits(balance2, 18)
43
- };
44
- }
45
- const [balance, decimals] = await Promise.all([
46
- publicClient.readContract({
47
- address: currencyAddress,
48
- abi: erc20Abi,
49
- functionName: "balanceOf",
50
- args: [userAddress]
51
- }),
52
- publicClient.readContract({
53
- address: currencyAddress,
54
- abi: erc20Abi,
55
- functionName: "decimals"
56
- })
57
- ]);
58
- return {
59
- value: balance,
60
- formatted: formatUnits(balance, decimals)
61
- };
62
- } : skipToken
63
- });
64
- }
65
-
66
- // src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx
67
- import { Image, Text as Text2 } from "@0xsequence/design-system";
68
- import { observer } from "@legendapp/state/react";
69
- import { useEffect } from "react";
70
- import { formatUnits as formatUnits2, zeroAddress as zeroAddress2 } from "viem";
71
-
72
- // src/react/ui/components/_internals/custom-select/CustomSelect.tsx
73
- import {
74
- Button,
75
- ChevronDownIcon,
76
- DropdownMenuCheckboxItem,
77
- DropdownMenuContent,
78
- DropdownMenuPortal,
79
- DropdownMenuRoot,
80
- DropdownMenuTrigger,
81
- Text
82
- } from "@0xsequence/design-system";
83
- import { useState } from "react";
84
- import { jsx, jsxs } from "react/jsx-runtime";
85
- var CustomSelect = ({
86
- items,
87
- onValueChange,
88
- defaultValue,
89
- placeholder = "Select an option",
90
- disabled = false,
91
- className,
92
- testId = "custom-select"
93
- }) => {
94
- const [selectedItem, setSelectedItem] = useState(
95
- defaultValue
96
- );
97
- const handleValueChange = (item) => {
98
- setSelectedItem(item);
99
- onValueChange?.(item.value);
100
- };
101
- return /* @__PURE__ */ jsxs(DropdownMenuRoot, { children: [
102
- /* @__PURE__ */ jsx(DropdownMenuTrigger, { asChild: true, disabled, children: /* @__PURE__ */ jsx(
103
- Button,
104
- {
105
- size: "xs",
106
- label: /* @__PURE__ */ jsxs("div", { className: "flex items-center justify-center gap-1 truncate pr-3", children: [
107
- /* @__PURE__ */ jsx(Text, { variant: "xsmall", color: "text100", fontWeight: "bold", children: selectedItem ? selectedItem.content : placeholder }),
108
- /* @__PURE__ */ jsx(ChevronDownIcon, { size: "xs" })
109
- ] }),
110
- shape: "circle",
111
- opacity: "100",
112
- className: `bg-overlay-light py-1.5 pl-3 ${className || ""}`,
113
- "data-testid": `${testId}-trigger`
114
- }
115
- ) }),
116
- /* @__PURE__ */ jsx(DropdownMenuPortal, { children: /* @__PURE__ */ jsx(
117
- DropdownMenuContent,
118
- {
119
- align: "end",
120
- side: "bottom",
121
- sideOffset: 8,
122
- className: "z-[1000] overflow-hidden rounded-xl border border-border-base bg-color-overlay-glass shadow-lg backdrop-blur-md",
123
- "data-testid": `${testId}-content`,
124
- children: /* @__PURE__ */ jsx("div", { className: "max-h-[240px] overflow-auto", children: items.map((item) => /* @__PURE__ */ jsx(
125
- DropdownMenuCheckboxItem,
126
- {
127
- checked: selectedItem?.value === item.value,
128
- onCheckedChange: () => handleValueChange(item),
129
- disabled: item.disabled,
130
- className: "group relative flex cursor-pointer select-none items-center rounded-lg px-2 py-1.5 outline-none transition-colors hover:bg-background-hover data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>span[data-state='checked']]:hidden",
131
- "data-testid": `${testId}-option-${item.value}`,
132
- children: /* @__PURE__ */ jsx("div", { className: "flex w-full items-center justify-between", children: /* @__PURE__ */ jsx("div", { className: "flex items-center gap-2 truncate", children: typeof item.content === "string" ? /* @__PURE__ */ jsx(
133
- Text,
134
- {
135
- variant: "small",
136
- color: selectedItem?.value === item.value ? "text100" : "text80",
137
- className: `truncate ${selectedItem?.value === item.value ? "font-bold" : ""}`,
138
- "data-testid": `${testId}-option-text-${item.value}`,
139
- children: item.content
140
- }
141
- ) : /* @__PURE__ */ jsx(
142
- "div",
143
- {
144
- className: "truncate",
145
- "data-testid": `${testId}-option-content-${item.value}`,
146
- children: item.content
147
- }
148
- ) }) })
149
- },
150
- item.value
151
- )) })
152
- }
153
- ) })
154
- ] });
155
- };
156
-
157
- // src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx
158
- import { jsx as jsx2, jsxs as jsxs2 } from "react/jsx-runtime";
159
- var WaasFeeOptionsSelect = observer(
160
- ({
161
- options,
162
- selectedFeeOption$
163
- }) => {
164
- options = options.map((option) => ({
165
- ...option,
166
- token: {
167
- ...option.token,
168
- contractAddress: option.token.contractAddress || zeroAddress2
169
- }
170
- }));
171
- const feeOptions = options.map((option) => {
172
- const value = option.token.contractAddress ?? "";
173
- return FeeOptionSelectItem({ value, option });
174
- });
175
- useEffect(() => {
176
- if (options.length > 0 && !selectedFeeOption$.get())
177
- selectedFeeOption$.set(options[0]);
178
- }, [options]);
179
- if (options.length === 0 || !selectedFeeOption$.get()?.token) return null;
180
- return /* @__PURE__ */ jsx2(
181
- CustomSelect,
182
- {
183
- items: feeOptions,
184
- onValueChange: (value) => {
185
- const selectedOption = options.find(
186
- (option) => option.token.contractAddress === value
187
- );
188
- selectedFeeOption$.set(selectedOption);
189
- },
190
- defaultValue: selectedFeeOption$.get()?.token.contractAddress ? FeeOptionSelectItem({
191
- value: selectedFeeOption$.get()?.token.contractAddress ?? "",
192
- option: selectedFeeOption$.get() ?? options[0]
193
- }) : void 0
194
- }
195
- );
196
- }
197
- );
198
- function FeeOptionSelectItem({
199
- value,
200
- option
201
- }) {
202
- return {
203
- value,
204
- content: /* @__PURE__ */ jsxs2("div", { className: "flex items-center gap-2", children: [
205
- /* @__PURE__ */ jsx2(
206
- Image,
207
- {
208
- className: "h-3 w-3",
209
- src: option.token.logoURL,
210
- alt: option.token.symbol
211
- }
212
- ),
213
- /* @__PURE__ */ jsxs2("div", { className: "flex gap-1", children: [
214
- /* @__PURE__ */ jsx2(Text2, { className: "font-body text-sm", color: "text100", children: "Fee" }),
215
- /* @__PURE__ */ jsxs2(
216
- Text2,
217
- {
218
- className: "font-body text-sm",
219
- color: "text50",
220
- fontWeight: "semibold",
221
- children: [
222
- "(in ",
223
- option.token.symbol,
224
- ")"
225
- ]
226
- }
227
- ),
228
- /* @__PURE__ */ jsx2(Text2, { className: "font-body text-sm", color: "text100", children: ":" })
229
- ] }),
230
- /* @__PURE__ */ jsx2(Text2, { className: "font-body text-sm", children: formatUnits2(BigInt(option.value), option.token.decimals || 0) })
231
- ] })
232
- };
233
- }
234
- var WaasFeeOptionsSelect_default = WaasFeeOptionsSelect;
235
-
236
- // src/react/ui/modals/_internal/components/waasFeeOptionsBox/store.ts
237
- import { observable } from "@legendapp/state";
238
- var initialState = {
239
- selectedFeeOption: void 0
240
- };
241
- var waasFeeOptionsModal$ = observable(initialState);
242
-
243
- // src/react/ui/modals/_internal/components/waasFeeOptionsBox/index.tsx
244
- import { jsx as jsx3, jsxs as jsxs3 } from "react/jsx-runtime";
245
- var WaasFeeOptionsBox = observer2(
246
- ({
247
- onFeeOptionsLoaded,
248
- onFeeOptionConfirmed,
249
- chainId
250
- }) => {
251
- const { address: userAddress } = useAccount();
252
- const selectedFeeOption$ = waasFeeOptionsModal$.selectedFeeOption;
253
- const [pendingFeeOptionConfirmation, confirmPendingFeeOption] = useWaasFeeOptions();
254
- const { data: currencyBalance, isLoading: currencyBalanceLoading } = useCurrencyBalance({
255
- chainId,
256
- currencyAddress: selectedFeeOption$.token.contractAddress.get() || zeroAddress3,
257
- userAddress
258
- });
259
- useEffect2(() => {
260
- if (pendingFeeOptionConfirmation) {
261
- onFeeOptionsLoaded();
262
- }
263
- }, [pendingFeeOptionConfirmation]);
264
- const selectedFeeOption = selectedFeeOption$.get();
265
- const insufficientBalance = (() => {
266
- if (!selectedFeeOption?.value || !selectedFeeOption.token.decimals) {
267
- return false;
268
- }
269
- if (!currencyBalance?.value && currencyBalance?.value !== 0n) {
270
- return true;
271
- }
272
- try {
273
- const feeValue = BigInt(selectedFeeOption.value);
274
- return currencyBalance.value === 0n || currencyBalance.value < feeValue;
275
- } catch {
276
- return true;
277
- }
278
- })();
279
- const handleConfirmFeeOption = () => {
280
- if (!selectedFeeOption?.token || !pendingFeeOptionConfirmation?.id)
281
- return;
282
- confirmPendingFeeOption(
283
- pendingFeeOptionConfirmation?.id,
284
- selectedFeeOption.token.contractAddress || zeroAddress3
285
- );
286
- onFeeOptionConfirmed();
287
- };
288
- if (!pendingFeeOptionConfirmation) return null;
289
- return /* @__PURE__ */ jsxs3("div", { className: "absolute bottom-[-140px] left-0 flex w-full flex-col gap-2 rounded-2xl bg-button-emphasis p-4 backdrop-blur-md", children: [
290
- /* @__PURE__ */ jsx3(Text3, { className: "mb-2 font-body text-large", fontWeight: "bold", children: "Select a fee option" }),
291
- /* @__PURE__ */ jsx3(
292
- WaasFeeOptionsSelect_default,
293
- {
294
- options: pendingFeeOptionConfirmation?.options || [],
295
- selectedFeeOption$
296
- }
297
- ),
298
- /* @__PURE__ */ jsxs3("div", { className: "flex w-full items-center justify-between", children: [
299
- currencyBalanceLoading ? /* @__PURE__ */ jsx3(Skeleton, { className: "w-1/3 rounded-xl", style: { height: 15 } }) : /* @__PURE__ */ jsxs3("div", { className: "flex items-center gap-2", children: [
300
- insufficientBalance && /* @__PURE__ */ jsx3(WarningIcon, { className: "text-negative", size: "xs" }),
301
- /* @__PURE__ */ jsxs3(
302
- Text3,
303
- {
304
- className: "font-body text-sm",
305
- fontWeight: "semibold",
306
- color: insufficientBalance ? "negative" : "text100",
307
- children: [
308
- "You have ",
309
- currencyBalance?.formatted || "0",
310
- " ",
311
- selectedFeeOption?.token.symbol
312
- ]
313
- }
314
- )
315
- ] }),
316
- /* @__PURE__ */ jsx3(
317
- Button2,
318
- {
319
- disabled: !selectedFeeOption?.token || insufficientBalance || currencyBalanceLoading,
320
- pending: currencyBalanceLoading,
321
- onClick: handleConfirmFeeOption,
322
- label: /* @__PURE__ */ jsx3("div", { className: "flex items-center gap-2", children: "Confirm" }),
323
- variant: insufficientBalance ? "danger" : "primary",
324
- size: "xs"
325
- }
326
- )
327
- ] })
328
- ] });
329
- }
330
- );
331
- var waasFeeOptionsBox_default = WaasFeeOptionsBox;
332
-
333
- // src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx
334
- import { jsx as jsx4, jsxs as jsxs4 } from "react/jsx-runtime";
335
- var ActionModal = observer3(
336
- ({
337
- isOpen,
338
- onClose,
339
- title,
340
- children,
341
- ctas,
342
- chainId,
343
- disableAnimation,
344
- modalLoading,
345
- spinnerContainerClassname
346
- }) => {
347
- const [isSelectingFees, setIsSelectingFees] = useState2(false);
348
- const { show: showSwitchChainModal } = useSwitchChainModal();
349
- const { wallet } = useWallet();
350
- const checkChain = async ({ onSuccess }) => {
351
- const walletChainId = await wallet?.getChainId();
352
- const chainMismatch = walletChainId !== Number(chainId);
353
- if (chainMismatch) {
354
- showSwitchChainModal({
355
- chainIdToSwitchTo: Number(chainId),
356
- onSuccess
357
- });
358
- } else {
359
- onSuccess();
360
- }
361
- };
362
- if (wallet?.isWaaS) {
363
- wallet.switchChain(Number(chainId));
364
- }
365
- if (!isOpen || !chainId) {
366
- return null;
367
- }
368
- return /* @__PURE__ */ jsxs4(
369
- Modal,
370
- {
371
- isDismissible: true,
372
- onClose,
373
- overlayProps: MODAL_OVERLAY_PROPS,
374
- contentProps: MODAL_CONTENT_PROPS,
375
- disableAnimation,
376
- children: [
377
- /* @__PURE__ */ jsxs4("div", { className: "relative flex grow flex-col items-center gap-4 p-6", children: [
378
- /* @__PURE__ */ jsx4(
379
- Text4,
380
- {
381
- className: "w-full text-center font-body text-large",
382
- fontWeight: "bold",
383
- color: "text100",
384
- children: title
385
- }
386
- ),
387
- modalLoading ? /* @__PURE__ */ jsx4(
388
- "div",
389
- {
390
- className: `flex ${spinnerContainerClassname} w-full items-center justify-center`,
391
- children: /* @__PURE__ */ jsx4(Spinner, { size: "lg" })
392
- }
393
- ) : children,
394
- /* @__PURE__ */ jsx4("div", { className: "flex w-full flex-col gap-2", children: ctas.map(
395
- (cta) => !cta.hidden && /* @__PURE__ */ jsx4(
396
- Button3,
397
- {
398
- className: "w-full rounded-[12px] [&>div]:justify-center",
399
- onClick: async () => {
400
- await checkChain({
401
- onSuccess: () => {
402
- cta.onClick();
403
- }
404
- });
405
- },
406
- variant: cta.variant || "primary",
407
- pending: cta.pending,
408
- disabled: cta.disabled || isSelectingFees,
409
- size: "lg",
410
- "data-testid": cta.testid,
411
- label: /* @__PURE__ */ jsxs4("div", { className: "flex items-center justify-center gap-2", children: [
412
- cta.pending && /* @__PURE__ */ jsx4(Spinner, { size: "sm" }),
413
- cta.label
414
- ] })
415
- },
416
- cta.label
417
- )
418
- ) })
419
- ] }),
420
- /* @__PURE__ */ jsx4(
421
- waasFeeOptionsBox_default,
422
- {
423
- chainId,
424
- onFeeOptionsLoaded: () => setIsSelectingFees(true),
425
- onFeeOptionConfirmed: () => setIsSelectingFees(false)
426
- }
427
- )
428
- ]
429
- }
430
- );
431
- }
432
- );
433
-
434
- // src/react/ui/modals/_internal/components/actionModal/store.ts
435
- import { observable as observable2 } from "@legendapp/state";
436
- function createActionModalStore() {
437
- return observable2({
438
- isOpen: false,
439
- chainId: null,
440
- collectionAddress: null
441
- });
442
- }
443
- function openModal(store) {
444
- store.isOpen.set(true);
445
- }
446
- function closeModal(store) {
447
- store.isOpen.set(false);
448
- }
449
-
450
- export {
451
- useCurrencyBalance,
452
- CustomSelect,
453
- ActionModal,
454
- createActionModalStore,
455
- openModal,
456
- closeModal
457
- };
458
- //# sourceMappingURL=chunk-OFY7OFTL.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/react/ui/modals/_internal/components/actionModal/ActionModal.tsx","../src/react/ui/modals/_internal/components/waasFeeOptionsBox/index.tsx","../src/react/hooks/useCurrencyBalance.tsx","../src/react/ui/modals/_internal/components/waasFeeOptionsSelect/WaasFeeOptionsSelect.tsx","../src/react/ui/components/_internals/custom-select/CustomSelect.tsx","../src/react/ui/modals/_internal/components/waasFeeOptionsBox/store.ts","../src/react/ui/modals/_internal/components/actionModal/store.ts"],"sourcesContent":["'use client';\n\nimport type React from 'react';\nimport { type ComponentProps, useState } from 'react';\n\nimport { Button, Modal, Spinner, Text } from '@0xsequence/design-system';\nimport { observer } from '@legendapp/state/react';\nimport { useWallet } from '../../../../../_internal/wallet/useWallet';\nimport { MODAL_OVERLAY_PROPS } from '../consts';\nimport { MODAL_CONTENT_PROPS } from '../consts';\nimport { useSwitchChainModal } from '../switchChainModal';\nimport WaasFeeOptionsBox from '../waasFeeOptionsBox';\n\nexport interface ActionModalProps {\n\tisOpen: boolean;\n\tonClose: () => void;\n\ttitle: string;\n\tchildren: React.ReactNode;\n\tctas: {\n\t\tlabel: string;\n\t\tonClick: (() => Promise<void>) | (() => void);\n\t\tpending?: boolean;\n\t\tdisabled?: boolean;\n\t\thidden?: boolean;\n\t\tvariant?: ComponentProps<typeof Button>['variant'];\n\t\ttestid?: string;\n\t}[];\n\tchainId: number;\n\tmodalLoading?: boolean;\n\tspinnerContainerClassname?: string;\n\tdisableAnimation?: boolean;\n}\n\nexport const ActionModal = observer(\n\t({\n\t\tisOpen,\n\t\tonClose,\n\t\ttitle,\n\t\tchildren,\n\t\tctas,\n\t\tchainId,\n\t\tdisableAnimation,\n\t\tmodalLoading,\n\t\tspinnerContainerClassname,\n\t}: ActionModalProps) => {\n\t\tconst [isSelectingFees, setIsSelectingFees] = useState(false);\n\t\tconst { show: showSwitchChainModal } = useSwitchChainModal();\n\t\tconst { wallet } = useWallet();\n\n\t\tconst checkChain = async ({ onSuccess }: { onSuccess: () => void }) => {\n\t\t\tconst walletChainId = await wallet?.getChainId();\n\t\t\tconst chainMismatch = walletChainId !== Number(chainId);\n\t\t\tif (chainMismatch) {\n\t\t\t\tshowSwitchChainModal({\n\t\t\t\t\tchainIdToSwitchTo: Number(chainId),\n\t\t\t\t\tonSuccess,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tonSuccess();\n\t\t\t}\n\t\t};\n\n\t\tif (wallet?.isWaaS) {\n\t\t\twallet.switchChain(Number(chainId));\n\t\t}\n\n\t\tif (!isOpen || !chainId) {\n\t\t\treturn null;\n\t\t}\n\n\t\treturn (\n\t\t\t<Modal\n\t\t\t\tisDismissible={true}\n\t\t\t\tonClose={onClose}\n\t\t\t\toverlayProps={MODAL_OVERLAY_PROPS}\n\t\t\t\tcontentProps={MODAL_CONTENT_PROPS}\n\t\t\t\tdisableAnimation={disableAnimation}\n\t\t\t>\n\t\t\t\t<div className=\"relative flex grow flex-col items-center gap-4 p-6\">\n\t\t\t\t\t<Text\n\t\t\t\t\t\tclassName=\"w-full text-center font-body text-large\"\n\t\t\t\t\t\tfontWeight=\"bold\"\n\t\t\t\t\t\tcolor=\"text100\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{title}\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t{modalLoading ? (\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclassName={`flex ${spinnerContainerClassname} w-full items-center justify-center`}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Spinner size=\"lg\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t) : (\n\t\t\t\t\t\tchildren\n\t\t\t\t\t)}\n\n\t\t\t\t\t<div className=\"flex w-full flex-col gap-2\">\n\t\t\t\t\t\t{ctas.map(\n\t\t\t\t\t\t\t(cta) =>\n\t\t\t\t\t\t\t\t!cta.hidden && (\n\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\tclassName=\"w-full rounded-[12px] [&>div]:justify-center\"\n\t\t\t\t\t\t\t\t\t\tkey={cta.label}\n\t\t\t\t\t\t\t\t\t\tonClick={async () => {\n\t\t\t\t\t\t\t\t\t\t\tawait checkChain({\n\t\t\t\t\t\t\t\t\t\t\t\tonSuccess: () => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tcta.onClick();\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tvariant={cta.variant || 'primary'}\n\t\t\t\t\t\t\t\t\t\tpending={cta.pending}\n\t\t\t\t\t\t\t\t\t\tdisabled={cta.disabled || isSelectingFees}\n\t\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\t\tdata-testid={cta.testid}\n\t\t\t\t\t\t\t\t\t\tlabel={\n\t\t\t\t\t\t\t\t\t\t\t<div className=\"flex items-center justify-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t{cta.pending && <Spinner size=\"sm\" />}\n\n\t\t\t\t\t\t\t\t\t\t\t\t{cta.label}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t)}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\n\t\t\t\t<WaasFeeOptionsBox\n\t\t\t\t\tchainId={chainId}\n\t\t\t\t\tonFeeOptionsLoaded={() => setIsSelectingFees(true)}\n\t\t\t\t\tonFeeOptionConfirmed={() => setIsSelectingFees(false)}\n\t\t\t\t/>\n\t\t\t</Modal>\n\t\t);\n\t},\n);\n","'use client';\n\nimport { useWaasFeeOptions } from '@0xsequence/connect';\nimport { Button, Skeleton, Text, WarningIcon } from '@0xsequence/design-system';\nimport { observer } from '@legendapp/state/react';\nimport { useEffect } from 'react';\nimport { type Hex, zeroAddress } from 'viem';\nimport { useAccount } from 'wagmi';\nimport { useCurrencyBalance } from '../../../../../hooks/useCurrencyBalance';\nimport WaasFeeOptionsSelect, {\n\ttype FeeOption,\n} from '../waasFeeOptionsSelect/WaasFeeOptionsSelect';\nimport { waasFeeOptionsModal$ } from './store';\n\ntype WaasFeeOptionsBoxProps = {\n\tonFeeOptionsLoaded: () => void;\n\tonFeeOptionConfirmed: () => void;\n\tchainId: number;\n};\n\nconst WaasFeeOptionsBox = observer(\n\t({\n\t\tonFeeOptionsLoaded,\n\t\tonFeeOptionConfirmed,\n\t\tchainId,\n\t}: WaasFeeOptionsBoxProps) => {\n\t\tconst { address: userAddress } = useAccount();\n\t\tconst selectedFeeOption$ = waasFeeOptionsModal$.selectedFeeOption;\n\t\tconst [pendingFeeOptionConfirmation, confirmPendingFeeOption] =\n\t\t\tuseWaasFeeOptions();\n\t\tconst { data: currencyBalance, isLoading: currencyBalanceLoading } =\n\t\t\tuseCurrencyBalance({\n\t\t\t\tchainId,\n\t\t\t\tcurrencyAddress: (selectedFeeOption$.token.contractAddress.get() ||\n\t\t\t\t\tzeroAddress) as Hex,\n\t\t\t\tuserAddress: userAddress as Hex,\n\t\t\t});\n\n\t\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\t\tuseEffect(() => {\n\t\t\tif (pendingFeeOptionConfirmation) {\n\t\t\t\tonFeeOptionsLoaded();\n\t\t\t}\n\t\t}, [pendingFeeOptionConfirmation]);\n\n\t\tconst selectedFeeOption = selectedFeeOption$.get();\n\t\tconst insufficientBalance = (() => {\n\t\t\tif (!selectedFeeOption?.value || !selectedFeeOption.token.decimals) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (!currencyBalance?.value && currencyBalance?.value !== 0n) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tconst feeValue = BigInt(selectedFeeOption.value);\n\t\t\t\treturn currencyBalance.value === 0n || currencyBalance.value < feeValue;\n\t\t\t} catch {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t})();\n\n\t\tconst handleConfirmFeeOption = () => {\n\t\t\tif (!selectedFeeOption?.token || !pendingFeeOptionConfirmation?.id)\n\t\t\t\treturn;\n\n\t\t\tconfirmPendingFeeOption(\n\t\t\t\tpendingFeeOptionConfirmation?.id,\n\t\t\t\tselectedFeeOption.token.contractAddress || zeroAddress,\n\t\t\t);\n\n\t\t\tonFeeOptionConfirmed();\n\t\t};\n\n\t\tif (!pendingFeeOptionConfirmation) return null;\n\n\t\treturn (\n\t\t\t<div className=\"absolute bottom-[-140px] left-0 flex w-full flex-col gap-2 rounded-2xl bg-button-emphasis p-4 backdrop-blur-md\">\n\t\t\t\t<Text className=\"mb-2 font-body text-large\" fontWeight=\"bold\">\n\t\t\t\t\tSelect a fee option\n\t\t\t\t</Text>\n\t\t\t\t<WaasFeeOptionsSelect\n\t\t\t\t\toptions={(pendingFeeOptionConfirmation?.options as FeeOption[]) || []}\n\t\t\t\t\tselectedFeeOption$={selectedFeeOption$}\n\t\t\t\t/>\n\t\t\t\t<div className=\"flex w-full items-center justify-between\">\n\t\t\t\t\t{currencyBalanceLoading ? (\n\t\t\t\t\t\t<Skeleton className=\"w-1/3 rounded-xl\" style={{ height: 15 }} />\n\t\t\t\t\t) : (\n\t\t\t\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t{insufficientBalance && (\n\t\t\t\t\t\t\t\t<WarningIcon className=\"text-negative\" size=\"xs\" />\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tclassName=\"font-body text-sm\"\n\t\t\t\t\t\t\t\tfontWeight=\"semibold\"\n\t\t\t\t\t\t\t\tcolor={insufficientBalance ? 'negative' : 'text100'}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tYou have {currencyBalance?.formatted || '0'}{' '}\n\t\t\t\t\t\t\t\t{selectedFeeOption?.token.symbol}\n\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<Button\n\t\t\t\t\t\tdisabled={\n\t\t\t\t\t\t\t!selectedFeeOption?.token ||\n\t\t\t\t\t\t\tinsufficientBalance ||\n\t\t\t\t\t\t\tcurrencyBalanceLoading\n\t\t\t\t\t\t}\n\t\t\t\t\t\tpending={currencyBalanceLoading}\n\t\t\t\t\t\tonClick={handleConfirmFeeOption}\n\t\t\t\t\t\tlabel={<div className=\"flex items-center gap-2\">Confirm</div>}\n\t\t\t\t\t\tvariant={insufficientBalance ? 'danger' : 'primary'}\n\t\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t);\n\t},\n);\n\nexport default WaasFeeOptionsBox;\n","import { skipToken, useQuery } from '@tanstack/react-query';\nimport { type Address, erc20Abi, formatUnits, zeroAddress } from 'viem';\nimport { usePublicClient } from 'wagmi';\nexport function useCurrencyBalance({\n\tcurrencyAddress,\n\tchainId,\n\tuserAddress,\n}: {\n\tcurrencyAddress: Address | undefined;\n\tchainId: number | undefined;\n\tuserAddress: Address | undefined;\n}) {\n\tconst publicClient = usePublicClient({ chainId });\n\n\treturn useQuery({\n\t\tqueryKey: ['balance', currencyAddress, chainId, userAddress],\n\t\tqueryFn:\n\t\t\t!!userAddress && !!chainId && !!currencyAddress && !!publicClient\n\t\t\t\t? async () => {\n\t\t\t\t\t\tif (currencyAddress === zeroAddress) {\n\t\t\t\t\t\t\tconst balance = await publicClient.getBalance({\n\t\t\t\t\t\t\t\taddress: userAddress,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tvalue: balance,\n\t\t\t\t\t\t\t\tformatted: formatUnits(balance, 18),\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tconst [balance, decimals] = await Promise.all([\n\t\t\t\t\t\t\tpublicClient.readContract({\n\t\t\t\t\t\t\t\taddress: currencyAddress,\n\t\t\t\t\t\t\t\tabi: erc20Abi,\n\t\t\t\t\t\t\t\tfunctionName: 'balanceOf',\n\t\t\t\t\t\t\t\targs: [userAddress],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tpublicClient.readContract({\n\t\t\t\t\t\t\t\taddress: currencyAddress,\n\t\t\t\t\t\t\t\tabi: erc20Abi,\n\t\t\t\t\t\t\t\tfunctionName: 'decimals',\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t]);\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tvalue: balance,\n\t\t\t\t\t\t\tformatted: formatUnits(balance, decimals),\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t: skipToken,\n\t});\n}\n","'use client';\n\nimport { Image, Text } from '@0xsequence/design-system';\nimport type { Observable } from '@legendapp/state';\nimport { observer } from '@legendapp/state/react';\nimport { useEffect } from 'react';\nimport { formatUnits, zeroAddress } from 'viem';\nimport {\n\tCustomSelect,\n\ttype SelectItem,\n} from '../../../../components/_internals/custom-select/CustomSelect';\n\nexport type FeeOption = {\n\tgasLimit: number;\n\tto: string;\n\ttoken: {\n\t\tchainId: number;\n\t\tcontractAddress: string | null;\n\t\tdecimals: number;\n\t\tlogoURL: string;\n\t\tname: string;\n\t\tsymbol: string;\n\t\ttokenID: string | null;\n\t\ttype: string;\n\t};\n\tvalue: string;\n};\n\nconst WaasFeeOptionsSelect = observer(\n\t({\n\t\toptions,\n\t\tselectedFeeOption$,\n\t}: {\n\t\toptions: FeeOption[];\n\t\tselectedFeeOption$: Observable<FeeOption | undefined>;\n\t}) => {\n\t\toptions = options.map((option) => ({\n\t\t\t...option,\n\t\t\ttoken: {\n\t\t\t\t...option.token,\n\t\t\t\tcontractAddress: option.token.contractAddress || zeroAddress,\n\t\t\t},\n\t\t}));\n\n\t\tconst feeOptions = options.map((option) => {\n\t\t\tconst value = option.token.contractAddress ?? '';\n\n\t\t\treturn FeeOptionSelectItem({ value, option });\n\t\t});\n\n\t\t// biome-ignore lint/correctness/useExhaustiveDependencies: <explanation>\n\t\tuseEffect(() => {\n\t\t\tif (options.length > 0 && !selectedFeeOption$.get())\n\t\t\t\tselectedFeeOption$.set(options[0]);\n\t\t}, [options]);\n\n\t\tif (options.length === 0 || !selectedFeeOption$.get()?.token) return null;\n\n\t\treturn (\n\t\t\t<CustomSelect\n\t\t\t\titems={feeOptions}\n\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\tconst selectedOption = options.find(\n\t\t\t\t\t\t(option) => option.token.contractAddress === value,\n\t\t\t\t\t);\n\n\t\t\t\t\tselectedFeeOption$.set(selectedOption);\n\t\t\t\t}}\n\t\t\t\tdefaultValue={\n\t\t\t\t\tselectedFeeOption$.get()?.token.contractAddress\n\t\t\t\t\t\t? FeeOptionSelectItem({\n\t\t\t\t\t\t\t\tvalue: selectedFeeOption$.get()?.token.contractAddress ?? '',\n\t\t\t\t\t\t\t\toption: selectedFeeOption$.get() ?? options[0],\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t: undefined\n\t\t\t\t}\n\t\t\t/>\n\t\t);\n\t},\n);\n\nfunction FeeOptionSelectItem({\n\tvalue,\n\toption,\n}: {\n\tvalue: string;\n\toption: FeeOption;\n}) {\n\treturn {\n\t\tvalue,\n\t\tcontent: (\n\t\t\t<div className=\"flex items-center gap-2\">\n\t\t\t\t<Image\n\t\t\t\t\tclassName=\"h-3 w-3\"\n\t\t\t\t\tsrc={option.token.logoURL}\n\t\t\t\t\talt={option.token.symbol}\n\t\t\t\t/>\n\n\t\t\t\t<div className=\"flex gap-1\">\n\t\t\t\t\t<Text className=\"font-body text-sm\" color=\"text100\">\n\t\t\t\t\t\tFee\n\t\t\t\t\t</Text>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tclassName=\"font-body text-sm\"\n\t\t\t\t\t\tcolor=\"text50\"\n\t\t\t\t\t\tfontWeight=\"semibold\"\n\t\t\t\t\t>\n\t\t\t\t\t\t(in {option.token.symbol})\n\t\t\t\t\t</Text>\n\n\t\t\t\t\t<Text className=\"font-body text-sm\" color=\"text100\">\n\t\t\t\t\t\t:\n\t\t\t\t\t</Text>\n\t\t\t\t</div>\n\n\t\t\t\t<Text className=\"font-body text-sm\">\n\t\t\t\t\t{formatUnits(BigInt(option.value), option.token.decimals || 0)}\n\t\t\t\t</Text>\n\t\t\t</div>\n\t\t),\n\t} as SelectItem;\n}\n\nexport default WaasFeeOptionsSelect;\n","'use client';\n\nimport {\n\tButton,\n\tChevronDownIcon,\n\tDropdownMenuCheckboxItem,\n\tDropdownMenuContent,\n\tDropdownMenuPortal,\n\tDropdownMenuRoot,\n\tDropdownMenuTrigger,\n\tText,\n} from '@0xsequence/design-system';\nimport { type ReactNode, useState } from 'react';\n\nexport interface SelectItem {\n\tvalue: string;\n\tcontent: ReactNode;\n\tdisabled?: boolean;\n}\n\ninterface CustomSelectProps {\n\titems: SelectItem[];\n\tonValueChange?: (value: string) => void;\n\tdefaultValue?: SelectItem;\n\tplaceholder?: string;\n\tdisabled?: boolean;\n\tbackgroundColor?: string;\n\tclassName?: string;\n\ttestId?: string;\n}\n\nexport const CustomSelect = ({\n\titems,\n\tonValueChange,\n\tdefaultValue,\n\tplaceholder = 'Select an option',\n\tdisabled = false,\n\tclassName,\n\ttestId = 'custom-select',\n}: CustomSelectProps) => {\n\tconst [selectedItem, setSelectedItem] = useState<SelectItem | undefined>(\n\t\tdefaultValue,\n\t);\n\n\tconst handleValueChange = (item: SelectItem) => {\n\t\tsetSelectedItem(item);\n\t\tonValueChange?.(item.value);\n\t};\n\n\treturn (\n\t\t<DropdownMenuRoot>\n\t\t\t<DropdownMenuTrigger asChild disabled={disabled}>\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"xs\"\n\t\t\t\t\tlabel={\n\t\t\t\t\t\t<div className=\"flex items-center justify-center gap-1 truncate pr-3\">\n\t\t\t\t\t\t\t<Text variant=\"xsmall\" color=\"text100\" fontWeight=\"bold\">\n\t\t\t\t\t\t\t\t{selectedItem ? selectedItem.content : placeholder}\n\t\t\t\t\t\t\t</Text>\n\n\t\t\t\t\t\t\t<ChevronDownIcon size=\"xs\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t}\n\t\t\t\t\tshape=\"circle\"\n\t\t\t\t\topacity=\"100\"\n\t\t\t\t\tclassName={`bg-overlay-light py-1.5 pl-3 ${className || ''}`}\n\t\t\t\t\tdata-testid={`${testId}-trigger`}\n\t\t\t\t/>\n\t\t\t</DropdownMenuTrigger>\n\n\t\t\t<DropdownMenuPortal>\n\t\t\t\t<DropdownMenuContent\n\t\t\t\t\talign=\"end\"\n\t\t\t\t\tside=\"bottom\"\n\t\t\t\t\tsideOffset={8}\n\t\t\t\t\tclassName=\"z-[1000] overflow-hidden rounded-xl border border-border-base bg-color-overlay-glass shadow-lg backdrop-blur-md\"\n\t\t\t\t\tdata-testid={`${testId}-content`}\n\t\t\t\t>\n\t\t\t\t\t<div className=\"max-h-[240px] overflow-auto\">\n\t\t\t\t\t\t{items.map((item) => (\n\t\t\t\t\t\t\t<DropdownMenuCheckboxItem\n\t\t\t\t\t\t\t\tkey={item.value}\n\t\t\t\t\t\t\t\tchecked={selectedItem?.value === item.value}\n\t\t\t\t\t\t\t\tonCheckedChange={() => handleValueChange(item)}\n\t\t\t\t\t\t\t\tdisabled={item.disabled}\n\t\t\t\t\t\t\t\tclassName=\"group relative flex cursor-pointer select-none items-center rounded-lg px-2 py-1.5 outline-none transition-colors hover:bg-background-hover data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>span[data-state='checked']]:hidden\"\n\t\t\t\t\t\t\t\tdata-testid={`${testId}-option-${item.value}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div className=\"flex w-full items-center justify-between\">\n\t\t\t\t\t\t\t\t\t<div className=\"flex items-center gap-2 truncate\">\n\t\t\t\t\t\t\t\t\t\t{typeof item.content === 'string' ? (\n\t\t\t\t\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"small\"\n\t\t\t\t\t\t\t\t\t\t\t\tcolor={\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedItem?.value === item.value\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t? 'text100'\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t: 'text80'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tclassName={`truncate ${\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedItem?.value === item.value ? 'font-bold' : ''\n\t\t\t\t\t\t\t\t\t\t\t\t}`}\n\t\t\t\t\t\t\t\t\t\t\t\tdata-testid={`${testId}-option-text-${item.value}`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.content}\n\t\t\t\t\t\t\t\t\t\t\t</Text>\n\t\t\t\t\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclassName=\"truncate\"\n\t\t\t\t\t\t\t\t\t\t\t\tdata-testid={`${testId}-option-content-${item.value}`}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{item.content}\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</DropdownMenuCheckboxItem>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenuContent>\n\t\t\t</DropdownMenuPortal>\n\t\t</DropdownMenuRoot>\n\t);\n};\n","import { observable } from '@legendapp/state';\nimport type { FeeOption } from '../waasFeeOptionsSelect/WaasFeeOptionsSelect';\n\ntype WaasFeeOptionsModalState = {\n\tselectedFeeOption: FeeOption | undefined;\n};\n\nconst initialState = {\n\tselectedFeeOption: undefined,\n} as WaasFeeOptionsModalState;\n\nexport const waasFeeOptionsModal$ = observable(initialState);\n","import { type Observable, observable } from '@legendapp/state';\nimport type { Address } from 'viem';\nimport type { ChainId } from '../../../../../_internal';\n\nexport interface ActionModalState {\n\tisOpen: boolean;\n\tchainId: ChainId | null;\n\tcollectionAddress: Address | null;\n}\n\nexport function createActionModalStore() {\n\treturn observable<ActionModalState>({\n\t\tisOpen: false,\n\t\tchainId: null,\n\t\tcollectionAddress: null,\n\t});\n}\n\nexport function openModal(store: Observable<ActionModalState>) {\n\tstore.isOpen.set(true);\n}\n\nexport function closeModal(store: Observable<ActionModalState>) {\n\tstore.isOpen.set(false);\n}\n"],"mappings":"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","names":["useState","Button","Text","observer","Button","Text","observer","useEffect","zeroAddress","balance","Text","formatUnits","zeroAddress","jsx","jsxs","zeroAddress","Text","formatUnits","jsx","jsxs","observer","zeroAddress","useEffect","Text","Button","jsx","jsxs","observer","useState","Text","Button","observable"]}