@daimo/sdk 1.0.0-rc.1 → 1.0.0-rc.3

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 (261) hide show
  1. package/README.md +15 -0
  2. package/dist/common/api.d.ts.map +1 -1
  3. package/dist/common/api.js +3 -1
  4. package/dist/common/api.js.map +1 -1
  5. package/dist/common/legacy/assert.d.ts +6 -0
  6. package/dist/common/legacy/assert.d.ts.map +1 -0
  7. package/dist/common/legacy/assert.js +25 -0
  8. package/dist/common/legacy/assert.js.map +1 -0
  9. package/dist/common/legacy/client.d.ts +67 -0
  10. package/dist/common/legacy/client.d.ts.map +1 -0
  11. package/dist/common/legacy/client.js +55 -0
  12. package/dist/common/legacy/client.js.map +1 -0
  13. package/dist/common/legacy/debug.d.ts +5 -0
  14. package/dist/common/legacy/debug.d.ts.map +1 -0
  15. package/dist/common/legacy/debug.js +21 -0
  16. package/dist/common/legacy/debug.js.map +1 -0
  17. package/dist/common/legacy/format.d.ts +16 -0
  18. package/dist/common/legacy/format.d.ts.map +1 -0
  19. package/dist/common/legacy/format.js +34 -0
  20. package/dist/common/legacy/format.js.map +1 -0
  21. package/dist/common/legacy/index.d.ts +11 -0
  22. package/dist/common/legacy/index.d.ts.map +1 -0
  23. package/dist/common/legacy/index.js +11 -0
  24. package/dist/common/legacy/index.js.map +1 -0
  25. package/dist/common/legacy/primitiveTypes.d.ts +11 -0
  26. package/dist/common/legacy/primitiveTypes.d.ts.map +1 -0
  27. package/dist/common/legacy/primitiveTypes.js +14 -0
  28. package/dist/common/legacy/primitiveTypes.js.map +1 -0
  29. package/dist/common/legacy/session.d.ts +246 -0
  30. package/dist/common/legacy/session.d.ts.map +1 -0
  31. package/dist/common/legacy/session.js +124 -0
  32. package/dist/common/legacy/session.js.map +1 -0
  33. package/dist/common/legacy/try.d.ts +4 -0
  34. package/dist/common/legacy/try.d.ts.map +1 -0
  35. package/dist/common/legacy/try.js +26 -0
  36. package/dist/common/legacy/try.js.map +1 -0
  37. package/dist/common/primitives.d.ts +2 -2
  38. package/dist/common/primitives.d.ts.map +1 -1
  39. package/dist/common/primitives.js +13 -4
  40. package/dist/common/primitives.js.map +1 -1
  41. package/dist/common/session.d.ts +2 -0
  42. package/dist/common/session.d.ts.map +1 -1
  43. package/dist/common/session.js +4 -0
  44. package/dist/common/session.js.map +1 -1
  45. package/dist/hooks/DaimoClientContext.d.ts +7 -0
  46. package/dist/hooks/DaimoClientContext.d.ts.map +1 -0
  47. package/dist/hooks/DaimoClientContext.js +15 -0
  48. package/dist/hooks/DaimoClientContext.js.map +1 -0
  49. package/dist/hooks/formatUserError.d.ts +3 -0
  50. package/dist/hooks/formatUserError.d.ts.map +1 -0
  51. package/dist/hooks/formatUserError.js +30 -0
  52. package/dist/hooks/formatUserError.js.map +1 -0
  53. package/dist/hooks/index.d.ts +12 -0
  54. package/dist/hooks/index.d.ts.map +1 -0
  55. package/dist/hooks/index.js +9 -0
  56. package/dist/hooks/index.js.map +1 -0
  57. package/dist/hooks/locale.d.ts +7 -0
  58. package/dist/hooks/locale.d.ts.map +1 -0
  59. package/dist/hooks/locale.js +15 -0
  60. package/dist/hooks/locale.js.map +1 -0
  61. package/dist/hooks/locales/en.d.ts +60 -0
  62. package/dist/hooks/locales/en.d.ts.map +1 -0
  63. package/dist/hooks/locales/en.js +76 -0
  64. package/dist/hooks/locales/en.js.map +1 -0
  65. package/dist/hooks/locales/es.d.ts +4 -0
  66. package/dist/hooks/locales/es.d.ts.map +1 -0
  67. package/dist/hooks/locales/es.js +60 -0
  68. package/dist/hooks/locales/es.js.map +1 -0
  69. package/dist/hooks/navEvent.d.ts +60 -0
  70. package/dist/hooks/navEvent.d.ts.map +1 -0
  71. package/dist/hooks/navEvent.js +16 -0
  72. package/dist/hooks/navEvent.js.map +1 -0
  73. package/dist/hooks/types.d.ts +71 -0
  74. package/dist/hooks/types.d.ts.map +1 -0
  75. package/dist/hooks/types.js +14 -0
  76. package/dist/hooks/types.js.map +1 -0
  77. package/dist/hooks/usePaymentCallbacks.d.ts +15 -0
  78. package/dist/hooks/usePaymentCallbacks.d.ts.map +1 -0
  79. package/dist/hooks/usePaymentCallbacks.js +27 -0
  80. package/dist/hooks/usePaymentCallbacks.js.map +1 -0
  81. package/dist/hooks/useSessionNav.d.ts +31 -0
  82. package/dist/hooks/useSessionNav.d.ts.map +1 -0
  83. package/dist/hooks/useSessionNav.js +439 -0
  84. package/dist/hooks/useSessionNav.js.map +1 -0
  85. package/dist/hooks/useSessionPolling.d.ts +10 -0
  86. package/dist/hooks/useSessionPolling.d.ts.map +1 -0
  87. package/dist/hooks/useSessionPolling.js +61 -0
  88. package/dist/hooks/useSessionPolling.js.map +1 -0
  89. package/dist/web/ChooseOptionPage.d.ts +9 -0
  90. package/dist/web/ChooseOptionPage.d.ts.map +1 -0
  91. package/dist/web/ChooseOptionPage.js +51 -0
  92. package/dist/web/ChooseOptionPage.js.map +1 -0
  93. package/dist/web/ConfirmationPage.d.ts +32 -0
  94. package/dist/web/ConfirmationPage.d.ts.map +1 -0
  95. package/dist/web/ConfirmationPage.js +72 -0
  96. package/dist/web/ConfirmationPage.js.map +1 -0
  97. package/dist/web/ConfirmationSpinner.d.ts +7 -0
  98. package/dist/web/ConfirmationSpinner.d.ts.map +1 -0
  99. package/dist/web/ConfirmationSpinner.js +20 -0
  100. package/dist/web/ConfirmationSpinner.js.map +1 -0
  101. package/dist/web/DaimoModal.d.ts +15 -0
  102. package/dist/web/DaimoModal.d.ts.map +1 -0
  103. package/dist/web/DaimoModal.js +283 -0
  104. package/dist/web/DaimoModal.js.map +1 -0
  105. package/dist/web/DeeplinkPage.d.ts +8 -0
  106. package/dist/web/DeeplinkPage.d.ts.map +1 -0
  107. package/dist/web/DeeplinkPage.js +13 -0
  108. package/dist/web/DeeplinkPage.js.map +1 -0
  109. package/dist/web/ErrorPage.d.ts +28 -0
  110. package/dist/web/ErrorPage.d.ts.map +1 -0
  111. package/dist/web/ErrorPage.js +47 -0
  112. package/dist/web/ErrorPage.js.map +1 -0
  113. package/dist/web/ExchangePage.d.ts +11 -0
  114. package/dist/web/ExchangePage.d.ts.map +1 -0
  115. package/dist/web/ExchangePage.js +13 -0
  116. package/dist/web/ExchangePage.js.map +1 -0
  117. package/dist/web/ExpiredPage.d.ts +9 -0
  118. package/dist/web/ExpiredPage.d.ts.map +1 -0
  119. package/dist/web/ExpiredPage.js +12 -0
  120. package/dist/web/ExpiredPage.js.map +1 -0
  121. package/dist/web/ModalSkeleton.d.ts +7 -0
  122. package/dist/web/ModalSkeleton.d.ts.map +1 -0
  123. package/dist/web/ModalSkeleton.js +13 -0
  124. package/dist/web/ModalSkeleton.js.map +1 -0
  125. package/dist/web/ProgressDots.d.ts +16 -0
  126. package/dist/web/ProgressDots.d.ts.map +1 -0
  127. package/dist/web/ProgressDots.js +55 -0
  128. package/dist/web/ProgressDots.js.map +1 -0
  129. package/dist/web/QRCode.d.ts +7 -0
  130. package/dist/web/QRCode.d.ts.map +1 -0
  131. package/dist/web/QRCode.js +69 -0
  132. package/dist/web/QRCode.js.map +1 -0
  133. package/dist/web/SelectAmountPage.d.ts +21 -0
  134. package/dist/web/SelectAmountPage.d.ts.map +1 -0
  135. package/dist/web/SelectAmountPage.js +27 -0
  136. package/dist/web/SelectAmountPage.js.map +1 -0
  137. package/dist/web/SelectTokenPage.d.ts +14 -0
  138. package/dist/web/SelectTokenPage.d.ts.map +1 -0
  139. package/dist/web/SelectTokenPage.js +71 -0
  140. package/dist/web/SelectTokenPage.js.map +1 -0
  141. package/dist/web/WaitingDepositAddressPage.d.ts +14 -0
  142. package/dist/web/WaitingDepositAddressPage.d.ts.map +1 -0
  143. package/dist/web/WaitingDepositAddressPage.js +126 -0
  144. package/dist/web/WaitingDepositAddressPage.js.map +1 -0
  145. package/dist/web/WalletAmountPage.d.ts +10 -0
  146. package/dist/web/WalletAmountPage.d.ts.map +1 -0
  147. package/dist/web/WalletAmountPage.js +158 -0
  148. package/dist/web/WalletAmountPage.js.map +1 -0
  149. package/dist/web/api/navTree.d.ts +1 -0
  150. package/dist/web/api/navTree.d.ts.map +1 -1
  151. package/dist/web/buttons.d.ts +15 -0
  152. package/dist/web/buttons.d.ts.map +1 -0
  153. package/dist/web/buttons.js +24 -0
  154. package/dist/web/buttons.js.map +1 -0
  155. package/dist/web/components/ChooseChainPage.d.ts +9 -0
  156. package/dist/web/components/ChooseChainPage.d.ts.map +1 -0
  157. package/dist/web/components/ChooseChainPage.js +10 -0
  158. package/dist/web/components/ChooseChainPage.js.map +1 -0
  159. package/dist/web/components/ChooseOptionPage.d.ts.map +1 -1
  160. package/dist/web/components/ChooseOptionPage.js +2 -10
  161. package/dist/web/components/ChooseOptionPage.js.map +1 -1
  162. package/dist/web/components/ChooseWalletPage.d.ts +13 -0
  163. package/dist/web/components/ChooseWalletPage.d.ts.map +1 -0
  164. package/dist/web/components/ChooseWalletPage.js +15 -0
  165. package/dist/web/components/ChooseWalletPage.js.map +1 -0
  166. package/dist/web/components/ConfirmationPage.d.ts +3 -1
  167. package/dist/web/components/ConfirmationPage.d.ts.map +1 -1
  168. package/dist/web/components/ConfirmationPage.js +3 -2
  169. package/dist/web/components/ConfirmationPage.js.map +1 -1
  170. package/dist/web/components/DaimoModal.d.ts.map +1 -1
  171. package/dist/web/components/DaimoModal.js +72 -137
  172. package/dist/web/components/DaimoModal.js.map +1 -1
  173. package/dist/web/components/DeeplinkPage.d.ts +1 -0
  174. package/dist/web/components/DeeplinkPage.d.ts.map +1 -1
  175. package/dist/web/components/DeeplinkPage.js +13 -2
  176. package/dist/web/components/DeeplinkPage.js.map +1 -1
  177. package/dist/web/components/ExchangePage.js +2 -2
  178. package/dist/web/components/ExchangePage.js.map +1 -1
  179. package/dist/web/components/ExpiredPage.d.ts +2 -1
  180. package/dist/web/components/ExpiredPage.d.ts.map +1 -1
  181. package/dist/web/components/ExpiredPage.js +3 -3
  182. package/dist/web/components/ExpiredPage.js.map +1 -1
  183. package/dist/web/components/SelectTokenPage.d.ts +2 -1
  184. package/dist/web/components/SelectTokenPage.d.ts.map +1 -1
  185. package/dist/web/components/SelectTokenPage.js +5 -9
  186. package/dist/web/components/SelectTokenPage.js.map +1 -1
  187. package/dist/web/components/WalletAmountPage.js +1 -1
  188. package/dist/web/components/WalletAmountPage.js.map +1 -1
  189. package/dist/web/components/containers.d.ts.map +1 -1
  190. package/dist/web/components/containers.js +6 -2
  191. package/dist/web/components/containers.js.map +1 -1
  192. package/dist/web/components/shared.d.ts +9 -4
  193. package/dist/web/components/shared.d.ts.map +1 -1
  194. package/dist/web/components/shared.js +13 -4
  195. package/dist/web/components/shared.js.map +1 -1
  196. package/dist/web/containers.d.ts +19 -0
  197. package/dist/web/containers.d.ts.map +1 -0
  198. package/dist/web/containers.js +77 -0
  199. package/dist/web/containers.js.map +1 -0
  200. package/dist/web/hooks/locales/en.d.ts +2 -0
  201. package/dist/web/hooks/locales/en.d.ts.map +1 -1
  202. package/dist/web/hooks/locales/en.js +2 -0
  203. package/dist/web/hooks/locales/en.js.map +1 -1
  204. package/dist/web/hooks/locales/es.d.ts.map +1 -1
  205. package/dist/web/hooks/locales/es.js +2 -0
  206. package/dist/web/hooks/locales/es.js.map +1 -1
  207. package/dist/web/hooks/types.d.ts +8 -0
  208. package/dist/web/hooks/types.d.ts.map +1 -1
  209. package/dist/web/hooks/types.js.map +1 -1
  210. package/dist/web/hooks/useDepositAddress.d.ts +7 -0
  211. package/dist/web/hooks/useDepositAddress.d.ts.map +1 -0
  212. package/dist/web/hooks/useDepositAddress.js +36 -0
  213. package/dist/web/hooks/useDepositAddress.js.map +1 -0
  214. package/dist/web/hooks/useInjectedWallets.d.ts +14 -0
  215. package/dist/web/hooks/useInjectedWallets.d.ts.map +1 -0
  216. package/dist/web/hooks/useInjectedWallets.js +67 -0
  217. package/dist/web/hooks/useInjectedWallets.js.map +1 -0
  218. package/dist/web/hooks/usePaymentCallbacks.d.ts.map +1 -1
  219. package/dist/web/hooks/usePaymentCallbacks.js +2 -3
  220. package/dist/web/hooks/usePaymentCallbacks.js.map +1 -1
  221. package/dist/web/hooks/useSessionNav.d.ts +5 -3
  222. package/dist/web/hooks/useSessionNav.d.ts.map +1 -1
  223. package/dist/web/hooks/useSessionNav.js +111 -30
  224. package/dist/web/hooks/useSessionNav.js.map +1 -1
  225. package/dist/web/hooks/useSessionPolling.d.ts +1 -1
  226. package/dist/web/hooks/useSessionPolling.d.ts.map +1 -1
  227. package/dist/web/hooks/useSessionPolling.js +14 -19
  228. package/dist/web/hooks/useSessionPolling.js.map +1 -1
  229. package/dist/web/hooks/useWalletFlow.d.ts +4 -0
  230. package/dist/web/hooks/useWalletFlow.d.ts.map +1 -1
  231. package/dist/web/hooks/useWalletFlow.js +66 -11
  232. package/dist/web/hooks/useWalletFlow.js.map +1 -1
  233. package/dist/web/hooks/walletProvider.d.ts +2 -0
  234. package/dist/web/hooks/walletProvider.d.ts.map +1 -1
  235. package/dist/web/hooks/walletProvider.js +9 -0
  236. package/dist/web/hooks/walletProvider.js.map +1 -1
  237. package/dist/web/icons.d.ts +22 -0
  238. package/dist/web/icons.d.ts.map +1 -0
  239. package/dist/web/icons.js +33 -0
  240. package/dist/web/icons.js.map +1 -0
  241. package/dist/web/index.d.ts +3 -0
  242. package/dist/web/index.d.ts.map +1 -1
  243. package/dist/web/index.js +2 -0
  244. package/dist/web/index.js.map +1 -1
  245. package/dist/web/shared.d.ts +93 -0
  246. package/dist/web/shared.d.ts.map +1 -0
  247. package/dist/web/shared.js +202 -0
  248. package/dist/web/shared.js.map +1 -0
  249. package/dist/web/useCopyToClipboard.d.ts +6 -0
  250. package/dist/web/useCopyToClipboard.d.ts.map +1 -0
  251. package/dist/web/useCopyToClipboard.js +20 -0
  252. package/dist/web/useCopyToClipboard.js.map +1 -0
  253. package/dist/web/useWalletFlow.d.ts +23 -0
  254. package/dist/web/useWalletFlow.d.ts.map +1 -0
  255. package/dist/web/useWalletFlow.js +334 -0
  256. package/dist/web/useWalletFlow.js.map +1 -0
  257. package/dist/web/walletProvider.d.ts +34 -0
  258. package/dist/web/walletProvider.d.ts.map +1 -0
  259. package/dist/web/walletProvider.js +14 -0
  260. package/dist/web/walletProvider.js.map +1 -0
  261. package/package.json +2 -1
@@ -0,0 +1,158 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useState } from "react";
3
+ import { formatUnits } from "viem";
4
+ import { PrimaryButton } from "./buttons.js";
5
+ import { t } from "../hooks/locale.js";
6
+ import { PageHeader, TokenIconWithChainBadge } from "./shared.js";
7
+ /** Check if device supports touch (to avoid autofocus on mobile) */
8
+ function isTouchDevice() {
9
+ if (typeof window === "undefined")
10
+ return false;
11
+ return "ontouchstart" in window || navigator.maxTouchPoints > 0;
12
+ }
13
+ /** Amount entry page for wallet payment flow */
14
+ export function WalletAmountPage({ token, onBack, onContinue, }) {
15
+ const balanceToken = token.balance.token;
16
+ const minimumUsd = token.minimumRequired.usd;
17
+ const maximumUsd = token.balance.usd;
18
+ // Check if this is a USD stablecoin (fiatISO is set on base Token type)
19
+ const isUsdStablecoin = balanceToken.fiatISO === "USD";
20
+ // Input state
21
+ const [usdStr, setUsdStr] = useState("");
22
+ const [tokenStr, setTokenStr] = useState("");
23
+ const [isEditingUsd, setIsEditingUsd] = useState(true);
24
+ // Derived values - use rounded max for comparison to avoid floating point issues
25
+ const amountUsd = parseFloat(usdStr) || 0;
26
+ const roundedMaxUsd = parseFloat(roundUsd(maximumUsd));
27
+ const isValid = amountUsd >= minimumUsd && amountUsd <= roundedMaxUsd;
28
+ const showMinWarning = usdStr !== "" && amountUsd < minimumUsd;
29
+ const showMaxWarning = usdStr !== "" && amountUsd > roundedMaxUsd;
30
+ // Convert between USD and token amounts using token.usd (price of 1 token in USD)
31
+ const usdToTokenStr = useCallback((usd) => {
32
+ if (usd === 0)
33
+ return "";
34
+ // usd / token.usd = how many tokens for that USD amount
35
+ const tokenAmount = usd / balanceToken.usd;
36
+ return roundTokenAmountUnits(tokenAmount, balanceToken);
37
+ }, [balanceToken]);
38
+ const tokenToUsdStr = useCallback((tokenAmountUnits) => {
39
+ if (tokenAmountUnits === 0)
40
+ return "";
41
+ // tokenAmount * token.usd = USD value
42
+ const usd = tokenAmountUnits * balanceToken.usd;
43
+ return roundUsd(usd);
44
+ }, [balanceToken]);
45
+ // Update values when input changes
46
+ const updateValues = useCallback((newUsdStr, newTokenStr, editingUsd) => {
47
+ // When switching modes, format the non-edited value nicely
48
+ if (editingUsd) {
49
+ const tokenNum = parseFloat(newTokenStr) || 0;
50
+ const formattedToken = tokenNum > 0
51
+ ? stripTrailingZeros(roundTokenAmountUnits(tokenNum, balanceToken))
52
+ : "";
53
+ setUsdStr(newUsdStr);
54
+ setTokenStr(formattedToken);
55
+ }
56
+ else {
57
+ const usdNum = parseFloat(newUsdStr) || 0;
58
+ const formattedUsd = usdNum > 0 ? roundUsd(usdNum) : "";
59
+ setUsdStr(formattedUsd);
60
+ setTokenStr(newTokenStr);
61
+ }
62
+ setIsEditingUsd(editingUsd);
63
+ }, [balanceToken]);
64
+ const handleInputChange = (e) => {
65
+ const value = e.target.value;
66
+ // Allow empty, or digits with up to appropriate decimal places
67
+ const maxDecimals = isEditingUsd ? 2 : balanceToken.displayDecimals;
68
+ const regex = new RegExp(`^\\d*\\.?\\d{0,${maxDecimals}}$`);
69
+ if (value !== "" && !regex.test(value))
70
+ return;
71
+ if (isEditingUsd) {
72
+ const newUsd = parseFloat(value) || 0;
73
+ setUsdStr(value);
74
+ setTokenStr(usdToTokenStr(newUsd));
75
+ }
76
+ else {
77
+ const newToken = parseFloat(value) || 0;
78
+ setTokenStr(value);
79
+ setUsdStr(tokenToUsdStr(newToken));
80
+ }
81
+ };
82
+ const handleKeyDown = (e) => {
83
+ if (e.key === "Enter" && isValid) {
84
+ onContinue(amountUsd);
85
+ }
86
+ };
87
+ const handleMax = () => {
88
+ const maxTokenAmountUnits = Number(formatUnits(BigInt(token.balance.amount), balanceToken.decimals));
89
+ const maxUsdStr = roundUsd(maximumUsd);
90
+ const maxTokenStr = roundTokenAmountUnits(maxTokenAmountUnits, balanceToken);
91
+ setUsdStr(maxUsdStr);
92
+ setTokenStr(maxTokenStr);
93
+ };
94
+ const handleSwitchCurrency = () => {
95
+ updateValues(usdStr, tokenStr, !isEditingUsd);
96
+ };
97
+ // Autofocus only on non-touch devices to avoid keyboard popup
98
+ const [shouldAutoFocus, setShouldAutoFocus] = useState(false);
99
+ useEffect(() => {
100
+ setShouldAutoFocus(!isTouchDevice());
101
+ }, []);
102
+ // Dynamic input width
103
+ const currentValue = isEditingUsd ? usdStr : tokenStr;
104
+ const inputWidth = currentValue.length === 0
105
+ ? "3.55ch"
106
+ : `${Math.min(currentValue.length - (currentValue.match(/\./g) || []).length * 0.45, 10)}ch`;
107
+ // Balance/warning message
108
+ const maxTokenAmountUnits = Number(formatUnits(BigInt(token.balance.amount), balanceToken.decimals));
109
+ const getBalanceMessage = () => {
110
+ if (isEditingUsd) {
111
+ return isUsdStablecoin
112
+ ? `${t.balance} $${roundUsd(maximumUsd)}`
113
+ : `${t.balance} $${roundUsd(maximumUsd)} ${balanceToken.symbol}`;
114
+ }
115
+ return `${t.balance} ${roundTokenAmountUnits(maxTokenAmountUnits, balanceToken)} ${balanceToken.symbol}`;
116
+ };
117
+ const getMessage = () => {
118
+ const formatAmount = (usd) => isEditingUsd
119
+ ? `$${roundUsd(usd)}`
120
+ : `${usdToTokenStr(usd)} ${balanceToken.symbol}`;
121
+ if (showMaxWarning)
122
+ return `${t.maximum} ${formatAmount(maximumUsd)}`;
123
+ if (showMinWarning)
124
+ return `${t.minimum} ${formatAmount(minimumUsd)}`;
125
+ return getBalanceMessage();
126
+ };
127
+ const messageClass = showMinWarning || showMaxWarning
128
+ ? "text-sm text-[var(--daimo-text)]"
129
+ : "text-sm text-[var(--daimo-text-secondary)]";
130
+ // Secondary amount for switch button
131
+ const secondaryAmount = isEditingUsd
132
+ ? `${tokenStr || "0"} ${balanceToken.symbol}`
133
+ : `$${usdStr || roundUsd(0)}`;
134
+ return (_jsxs("div", { className: "flex flex-col flex-1", children: [_jsx(PageHeader, { title: t.enterAmount, onBack: onBack }), _jsxs("div", { className: "flex-1 flex flex-col items-center justify-center p-6 gap-6", children: [_jsx(TokenIconWithChainBadge, { token: balanceToken, size: "lg" }), _jsxs("div", { className: "flex items-center justify-center gap-2", children: [_jsx("button", { className: "invisible px-3 py-1 text-sm min-h-[44px]", children: t.max }), _jsxs("div", { className: "flex items-center justify-center gap-1", children: [isEditingUsd && (_jsx("span", { className: `text-3xl font-semibold tabular-nums ${usdStr ? "text-[var(--daimo-text)]" : "text-[var(--daimo-placeholder)]"}`, children: "$" })), _jsx("input", { type: "text", inputMode: "decimal", value: currentValue, onChange: handleInputChange, onKeyDown: handleKeyDown, placeholder: "0.00", className: "bg-transparent text-5xl font-semibold text-[var(--daimo-text)] placeholder-[var(--daimo-placeholder)] outline-none caret-[var(--daimo-text-muted)] tabular-nums", style: {
135
+ width: inputWidth,
136
+ minWidth: "1ch",
137
+ maxWidth: "10ch",
138
+ fontSize: "clamp(16px, 3rem, 3rem)", // Ensure 16px minimum for iOS
139
+ }, autoFocus: shouldAutoFocus }), !isEditingUsd && (_jsx("span", { className: "text-xl font-semibold text-[var(--daimo-text-muted)]", children: balanceToken.symbol }))] }), _jsx("button", { onClick: handleMax, className: "px-3 py-1 min-h-[44px] min-w-[44px] text-sm font-normal rounded-full bg-[var(--daimo-surface-secondary)] text-[var(--daimo-text-secondary)] hover:[@media(hover:hover)]:bg-[var(--daimo-surface-hover)] active:scale-[0.95] touch-action-manipulation transition-[background-color,transform] duration-150 ease-out", children: t.max })] }), !isUsdStablecoin && (_jsxs("button", { onClick: handleSwitchCurrency, className: "flex items-center gap-1 min-h-[44px] px-4 hover:[@media(hover:hover)]:opacity-70 active:opacity-50 touch-action-manipulation transition-opacity duration-150 ease", children: [_jsx(SwitchIcon, {}), _jsx("span", { className: "text-base text-[var(--daimo-text-secondary)] tabular-nums", children: secondaryAmount })] })), _jsx("p", { className: `${messageClass} tabular-nums`, children: getMessage() }), _jsx(PrimaryButton, { onClick: () => isValid && onContinue(amountUsd), disabled: !isValid, children: t.continue })] })] }));
140
+ }
141
+ // --- Helpers ---
142
+ const USD_DECIMALS = 2;
143
+ function roundUsd(usd) {
144
+ return usd.toFixed(USD_DECIMALS);
145
+ }
146
+ function roundTokenAmountUnits(amountUnits, token) {
147
+ if (amountUnits === 0)
148
+ return "0";
149
+ const decimals = token.displayDecimals;
150
+ return amountUnits.toFixed(decimals);
151
+ }
152
+ function stripTrailingZeros(val) {
153
+ return val.includes(".") ? val.replace(/\.?0+$/, "") : val;
154
+ }
155
+ function SwitchIcon() {
156
+ return (_jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", className: "text-[var(--daimo-text-muted)]", children: _jsx("path", { d: "M7 10L12 5L17 10M17 14L12 19L7 14", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }));
157
+ }
158
+ //# sourceMappingURL=WalletAmountPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WalletAmountPage.js","sourceRoot":"","sources":["../../src/web/WalletAmountPage.tsx"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ export type NavNodeDepositAddress = NavNodeCommon & {
25
25
  expiresAt: number;
26
26
  tokenSuffix: string;
27
27
  };
28
+ /** Mobile wallet deeplink. Opens directly on mobile; shows as QR code on desktop. */
28
29
  export type NavNodeDeeplink = NavNodeCommon & {
29
30
  type: "Deeplink";
30
31
  url: string;
@@ -1 +1 @@
1
- {"version":3,"file":"navTree.d.ts","sourceRoot":"","sources":["../../../src/web/api/navTree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,qDAAqD;AACrD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG;IAAE,OAAO,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AAE9D,KAAK,aAAa,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG;IAChD,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG;IAClD,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG;IAC5C,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG;IAC5C,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG;IACnD,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,OAAO,GACf,mBAAmB,GACnB,qBAAqB,GACrB,eAAe,GACf,eAAe,GACf,kBAAkB,GAClB,sBAAsB,CAAC"}
1
+ {"version":3,"file":"navTree.d.ts","sourceRoot":"","sources":["../../../src/web/api/navTree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAEvD,qDAAqD;AACrD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG;IAAE,OAAO,EAAE,OAAO,EAAE,CAAA;CAAE,CAAC;AAE9D,KAAK,aAAa,GAAG;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,aAAa,GAAG;IAChD,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,OAAO,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,aAAa,GAAG;IAClD,IAAI,EAAE,gBAAgB,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,qFAAqF;AACrF,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG;IAC5C,IAAI,EAAE,UAAU,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG;IAC5C,IAAI,EAAE,UAAU,CAAC;IACjB,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IAC7C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,aAAa,GAAG;IAC/C,IAAI,EAAE,aAAa,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,aAAa,GAAG;IACnD,IAAI,EAAE,iBAAiB,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,OAAO,GACf,mBAAmB,GACnB,qBAAqB,GACrB,eAAe,GACf,eAAe,GACf,kBAAkB,GAClB,sBAAsB,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { ReactNode } from "react";
2
+ import { ExternalLinkIcon } from "./icons.js";
3
+ export { ExternalLinkIcon };
4
+ type ButtonProps = {
5
+ children: ReactNode;
6
+ onClick?: () => void;
7
+ disabled?: boolean;
8
+ icon?: ReactNode;
9
+ className?: string;
10
+ };
11
+ /** Primary action button - full width, prominent styling */
12
+ export declare function PrimaryButton({ children, onClick, disabled, icon, className, }: ButtonProps): import("react/jsx-runtime").JSX.Element;
13
+ /** Secondary action button - for less prominent actions like "Done", "Close" */
14
+ export declare function SecondaryButton({ children, onClick, disabled, icon, className, }: ButtonProps): import("react/jsx-runtime").JSX.Element;
15
+ //# sourceMappingURL=buttons.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttons.d.ts","sourceRoot":"","sources":["../../src/web/buttons.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,SAAS,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,4DAA4D;AAC5D,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,OAAO,EACP,QAAgB,EAChB,IAAI,EACJ,SAAc,GACf,EAAE,WAAW,2CAqBb;AAED,gFAAgF;AAChF,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,OAAO,EACP,QAAgB,EAChB,IAAI,EACJ,SAAc,GACf,EAAE,WAAW,2CAqBb"}
@@ -0,0 +1,24 @@
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ExternalLinkIcon } from "./icons.js";
3
+ export { ExternalLinkIcon };
4
+ /** Primary action button - full width, prominent styling */
5
+ export function PrimaryButton({ children, onClick, disabled = false, icon, className = "", }) {
6
+ // Base: min 44px tap target, prevent double-tap zoom
7
+ const baseStyles = "w-full max-w-xs min-h-[44px] py-4 px-6 rounded-[var(--daimo-radius-lg)] font-semibold flex items-center justify-center gap-2 touch-action-manipulation transition-[background-color,transform] duration-150 ease-out";
8
+ // Active press effect for responsive feel
9
+ const activeStyles = "active:scale-[0.97]";
10
+ const enabledStyles = "bg-[var(--daimo-surface-secondary)] text-[var(--daimo-text)] hover:[@media(hover:hover)]:bg-[var(--daimo-surface-hover)]";
11
+ const disabledStyles = "bg-[var(--daimo-surface-secondary)] text-[var(--daimo-text-muted)] cursor-not-allowed";
12
+ return (_jsxs("button", { onClick: onClick, disabled: disabled, className: `${baseStyles} ${disabled ? disabledStyles : `${enabledStyles} ${activeStyles}`} ${className}`, children: [icon, children] }));
13
+ }
14
+ /** Secondary action button - for less prominent actions like "Done", "Close" */
15
+ export function SecondaryButton({ children, onClick, disabled = false, icon, className = "", }) {
16
+ // Base: min 44px tap target, prevent double-tap zoom
17
+ const baseStyles = "min-h-[44px] py-3 px-8 rounded-[var(--daimo-radius-md)] font-medium flex items-center justify-center gap-2 touch-action-manipulation transition-[background-color,transform] duration-150 ease-out";
18
+ // Active press effect for responsive feel
19
+ const activeStyles = "active:scale-[0.97]";
20
+ const enabledStyles = "bg-[var(--daimo-surface-secondary)] text-[var(--daimo-text)] hover:[@media(hover:hover)]:bg-[var(--daimo-surface-hover)]";
21
+ const disabledStyles = "bg-[var(--daimo-surface-secondary)] text-[var(--daimo-text-muted)] cursor-not-allowed";
22
+ return (_jsxs("button", { onClick: onClick, disabled: disabled, className: `${baseStyles} ${disabled ? disabledStyles : `${enabledStyles} ${activeStyles}`} ${className}`, children: [icon, children] }));
23
+ }
24
+ //# sourceMappingURL=buttons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buttons.js","sourceRoot":"","sources":["../../src/web/buttons.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAU5B,4DAA4D;AAC5D,MAAM,UAAU,aAAa,CAAC,EAC5B,QAAQ,EACR,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,SAAS,GAAG,EAAE,GACF;IACZ,qDAAqD;IACrD,MAAM,UAAU,GACd,sNAAsN,CAAC;IACzN,0CAA0C;IAC1C,MAAM,YAAY,GAAG,qBAAqB,CAAC;IAC3C,MAAM,aAAa,GACjB,0HAA0H,CAAC;IAC7H,MAAM,cAAc,GAClB,uFAAuF,CAAC;IAE1F,OAAO,CACL,kBACE,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,GAAG,UAAU,IAAI,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,YAAY,EAAE,IAAI,SAAS,EAAE,aAExG,IAAI,EACJ,QAAQ,IACF,CACV,CAAC;AACJ,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,eAAe,CAAC,EAC9B,QAAQ,EACR,OAAO,EACP,QAAQ,GAAG,KAAK,EAChB,IAAI,EACJ,SAAS,GAAG,EAAE,GACF;IACZ,qDAAqD;IACrD,MAAM,UAAU,GACd,oMAAoM,CAAC;IACvM,0CAA0C;IAC1C,MAAM,YAAY,GAAG,qBAAqB,CAAC;IAC3C,MAAM,aAAa,GACjB,0HAA0H,CAAC;IAC7H,MAAM,cAAc,GAClB,uFAAuF,CAAC;IAE1F,OAAO,CACL,kBACE,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,GAAG,UAAU,IAAI,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,YAAY,EAAE,IAAI,SAAS,EAAE,aAExG,IAAI,EACJ,QAAQ,IACF,CACV,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ type ChooseChainPageProps = {
2
+ walletName: string;
3
+ walletIcon: string;
4
+ onSelectChain: (chain: "evm" | "solana") => void;
5
+ onBack: (() => void) | null;
6
+ };
7
+ export declare function ChooseChainPage({ walletName, walletIcon, onSelectChain, onBack, }: ChooseChainPageProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
9
+ //# sourceMappingURL=ChooseChainPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChooseChainPage.d.ts","sourceRoot":"","sources":["../../../src/web/components/ChooseChainPage.tsx"],"names":[],"mappings":"AAIA,KAAK,oBAAoB,GAAG;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,QAAQ,KAAK,IAAI,CAAC;IACjD,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,eAAe,CAAC,EAC9B,UAAU,EACV,UAAU,EACV,aAAa,EACb,MAAM,GACP,EAAE,oBAAoB,2CA6BtB"}
@@ -0,0 +1,10 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ethereum, solana } from "../../common/chain.js";
3
+ import { PageHeader, getChainLogoUrl } from "./shared.js";
4
+ export function ChooseChainPage({ walletName, walletIcon, onSelectChain, onBack, }) {
5
+ return (_jsxs("div", { className: "flex flex-col flex-1 min-h-0", children: [_jsx(PageHeader, { title: walletName, onBack: onBack }), _jsxs("div", { className: "flex flex-col items-center gap-6 px-6 py-4", children: [walletIcon && (_jsx("img", { src: walletIcon, alt: walletName, className: "w-16 h-16 object-contain rounded-[25%]" })), _jsxs("div", { className: "flex flex-col gap-3 w-full", children: [_jsx(ChainRow, { label: "Ethereum", icon: getChainLogoUrl(ethereum.chainId), onClick: () => onSelectChain("evm") }), _jsx(ChainRow, { label: "Solana", icon: getChainLogoUrl(solana.chainId), onClick: () => onSelectChain("solana") })] })] })] }));
6
+ }
7
+ function ChainRow({ label, icon, onClick, }) {
8
+ return (_jsxs("button", { onClick: onClick, className: "w-full h-16 shrink-0 flex items-center justify-between px-5 rounded-[var(--daimo-radius-lg)] bg-[var(--daimo-surface-secondary)] hover:[@media(hover:hover)]:bg-[var(--daimo-surface-hover)] transition-colors text-left", children: [_jsx("span", { className: "text-[var(--daimo-text)] font-semibold", children: label }), _jsx("img", { src: icon, alt: label, className: "w-8 h-8 object-contain rounded-full" })] }));
9
+ }
10
+ //# sourceMappingURL=ChooseChainPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChooseChainPage.js","sourceRoot":"","sources":["../../../src/web/components/ChooseChainPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAS1D,MAAM,UAAU,eAAe,CAAC,EAC9B,UAAU,EACV,UAAU,EACV,aAAa,EACb,MAAM,GACe;IACrB,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,UAAU,IAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,GAAI,EAEjD,eAAK,SAAS,EAAC,4CAA4C,aACxD,UAAU,IAAI,CACb,cACE,GAAG,EAAE,UAAU,EACf,GAAG,EAAE,UAAU,EACf,SAAS,EAAC,wCAAwC,GAClD,CACH,EAED,eAAK,SAAS,EAAC,4BAA4B,aACzC,KAAC,QAAQ,IACP,KAAK,EAAC,UAAU,EAChB,IAAI,EAAE,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,EACvC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,GACnC,EACF,KAAC,QAAQ,IACP,KAAK,EAAC,QAAQ,EACd,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,OAAO,CAAC,EACrC,OAAO,EAAE,GAAG,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,GACtC,IACE,IACF,IACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAChB,KAAK,EACL,IAAI,EACJ,OAAO,GAKR;IACC,OAAO,CACL,kBACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,0NAA0N,aAEpO,eAAM,SAAS,EAAC,wCAAwC,YAAE,KAAK,GAAQ,EACvE,cACE,GAAG,EAAE,IAAI,EACT,GAAG,EAAE,KAAK,EACV,SAAS,EAAC,qCAAqC,GAC/C,IACK,CACV,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ChooseOptionPage.d.ts","sourceRoot":"","sources":["../../../src/web/components/ChooseOptionPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAKtE,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7B,CAAC;AAQF,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,UAAU,EACV,MAAM,GACP,EAAE,qBAAqB,2CAqDvB"}
1
+ {"version":3,"file":"ChooseOptionPage.d.ts","sourceRoot":"","sources":["../../../src/web/components/ChooseOptionPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAKtE,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,UAAU,EACV,MAAM,GACP,EAAE,qBAAqB,2CAyCvB"}
@@ -1,18 +1,10 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { t } from "../hooks/locale.js";
3
- import { PageHeader, resolveIconUrl } from "./shared.js";
4
- /** Max visible rows before scrolling */
5
- const MAX_VISIBLE_ROWS = 4;
6
- /** Row height (h-16 = 64px) + gap (gap-3 = 12px) */
7
- const ROW_HEIGHT = 64;
8
- const ROW_GAP = 12;
3
+ import { PageHeader, ScrollContent, resolveIconUrl } from "./shared.js";
9
4
  export function ChooseOptionPage({ node, onNavigate, onBack, }) {
10
5
  const useGridLayout = node.layout === "grid";
11
6
  const isRootPage = onBack === null;
12
- // Calculate max height for list layout (4 rows + 3 gaps)
13
- const needsScroll = !useGridLayout && node.options.length > MAX_VISIBLE_ROWS;
14
- const maxListHeight = MAX_VISIBLE_ROWS * ROW_HEIGHT + (MAX_VISIBLE_ROWS - 1) * ROW_GAP;
15
- return (_jsxs("div", { className: "flex flex-col flex-1 min-h-0", children: [_jsx(PageHeader, { title: node.title, onBack: onBack }), useGridLayout ? (_jsx("div", { className: "flex-1 overflow-y-auto scroll-fade px-6 pb-4", children: _jsx("div", { className: "grid grid-cols-4 gap-2", children: node.options.map((option) => (_jsx(GridOptionCell, { option: option, onClick: () => onNavigate(option.id) }, option.id))) }) })) : (_jsx("div", { className: "px-6 pb-4", children: _jsx("div", { className: `flex flex-col gap-3 ${needsScroll ? "overflow-y-auto scroll-fade" : ""}`, style: needsScroll ? { maxHeight: maxListHeight } : undefined, children: node.options.map((option) => (_jsx(OptionRow, { option: option, onClick: () => onNavigate(option.id) }, option.id))) }) })), isRootPage && (_jsx("div", { className: "py-4 text-center", children: _jsx("span", { className: "text-sm text-[var(--daimo-text-muted)]", children: t.poweredByDaimo }) }))] }));
7
+ return (_jsxs("div", { className: "flex flex-col flex-1 min-h-0", children: [_jsx(PageHeader, { title: node.title, onBack: onBack }), _jsx(ScrollContent, { children: useGridLayout ? (_jsx("div", { className: "grid grid-cols-4 gap-2", children: node.options.map((option) => (_jsx(GridOptionCell, { option: option, onClick: () => onNavigate(option.id) }, option.id))) })) : (_jsx("div", { className: "flex flex-col gap-3", children: node.options.map((option) => (_jsx(OptionRow, { option: option, onClick: () => onNavigate(option.id) }, option.id))) })) }), isRootPage && (_jsx("div", { className: "py-4 text-center", children: _jsx("span", { className: "text-sm text-[var(--daimo-text-muted)]", children: t.poweredByDaimo }) }))] }));
16
8
  }
17
9
  function GridOptionCell({ option, onClick, }) {
18
10
  const icons = getOptionIcons(option);
@@ -1 +1 @@
1
- {"version":3,"file":"ChooseOptionPage.js","sourceRoot":"","sources":["../../../src/web/components/ChooseOptionPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ChooseOptionPage.js","sourceRoot":"","sources":["../../../src/web/components/ChooseOptionPage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAQxE,MAAM,UAAU,gBAAgB,CAAC,EAC/B,IAAI,EACJ,UAAU,EACV,MAAM,GACgB;IACtB,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;IAC7C,MAAM,UAAU,GAAG,MAAM,KAAK,IAAI,CAAC;IAEnC,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI,EAEjD,KAAC,aAAa,cACX,aAAa,CAAC,CAAC,CAAC,CACf,cAAK,SAAS,EAAC,wBAAwB,YACpC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC5B,KAAC,cAAc,IAEb,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,IAF/B,MAAM,CAAC,EAAE,CAGd,CACH,CAAC,GACE,CACP,CAAC,CAAC,CAAC,CACF,cAAK,SAAS,EAAC,qBAAqB,YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC5B,KAAC,SAAS,IAER,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,IAF/B,MAAM,CAAC,EAAE,CAGd,CACH,CAAC,GACE,CACP,GACa,EAEf,UAAU,IAAI,CACb,cAAK,SAAS,EAAC,kBAAkB,YAC/B,eAAM,SAAS,EAAC,wCAAwC,YACrD,CAAC,CAAC,cAAc,GACZ,GACH,CACP,IACG,CACP,CAAC;AACJ,CAAC;AAED,SAAS,cAAc,CAAC,EACtB,MAAM,EACN,OAAO,GAIR;IACC,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IAE3C,OAAO,CACL,kBACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,iKAAiK,aAE1K,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CACnB,cACE,GAAG,EAAE,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAC7B,GAAG,EAAE,KAAK,EACV,SAAS,EAAC,4DAA4D,GACtE,CACH,EACD,eAAM,SAAS,EAAC,wEAAwE,YACrF,KAAK,GACD,IACA,CACV,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAAC,EACjB,MAAM,EACN,OAAO,GAIR;IACC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IAE3C,OAAO,CACL,kBACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,0NAA0N,aAEpO,eAAM,SAAS,EAAC,wCAAwC,YAAE,KAAK,GAAQ,EACvE,KAAC,WAAW,IAAC,MAAM,EAAE,MAAM,GAAI,IACxB,CACV,CAAC;AACJ,CAAC;AAED,6EAA6E;AAC7E,SAAS,cAAc,CAAC,MAAe;IACrC,IAAI,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,OAAO,MAAM,CAAC,KAAK,CAAC;IACtB,CAAC;IACD,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QACpC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,yCAAyC;AACzC,SAAS,WAAW,CAAC,EAAE,MAAM,EAAuB;IAClD,MAAM,KAAK,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;IACrC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpC,wBAAwB;IACxB,IAAI,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,CACL,cAAK,SAAS,EAAC,kCAAkC,YAC9C,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAClC,cAEE,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,GAAG,EAAC,EAAE,EACN,SAAS,EAAC,gDAAgD,IAHrD,CAAC,CAIN,CACH,CAAC,GACE,CACP,CAAC;IACJ,CAAC;IAED,kCAAkC;IAClC,OAAO,CACL,cAAK,SAAS,EAAC,mBAAmB,YAC/B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CACtB,cAEE,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,GAAG,EAAC,EAAE,EACN,SAAS,EAAC,+CAA+C,EACzD,KAAK,EAAE;gBACL,UAAU,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;gBAC3B,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC;aACzB,IAPI,CAAC,CAQN,CACH,CAAC,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { NavNodeChooseOption } from "../api/navTree.js";
2
+ import type { InjectedWallet } from "../hooks/useInjectedWallets.js";
3
+ type ChooseWalletPageProps = {
4
+ node: NavNodeChooseOption;
5
+ injectedWallets: InjectedWallet[];
6
+ onInjectedWalletSelect: (wallet: InjectedWallet) => void;
7
+ onNavigate: (nodeId: string) => void;
8
+ onBack: (() => void) | null;
9
+ };
10
+ /** Wallet selection page: EIP-6963 browser wallets at top, deeplink wallets below. */
11
+ export declare function ChooseWalletPage({ node, injectedWallets, onInjectedWalletSelect, onNavigate, onBack, }: ChooseWalletPageProps): import("react/jsx-runtime").JSX.Element;
12
+ export {};
13
+ //# sourceMappingURL=ChooseWalletPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChooseWalletPage.d.ts","sourceRoot":"","sources":["../../../src/web/components/ChooseWalletPage.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAIrE,KAAK,qBAAqB,GAAG;IAC3B,IAAI,EAAE,mBAAmB,CAAC;IAC1B,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,sBAAsB,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IACzD,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,gBAAgB,CAAC,EAC/B,IAAI,EACJ,eAAe,EACf,sBAAsB,EACtB,UAAU,EACV,MAAM,GACP,EAAE,qBAAqB,2CA0BvB"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { PageHeader, ScrollContent, resolveIconUrl } from "./shared.js";
3
+ /** Wallet selection page: EIP-6963 browser wallets at top, deeplink wallets below. */
4
+ export function ChooseWalletPage({ node, injectedWallets, onInjectedWalletSelect, onNavigate, onBack, }) {
5
+ return (_jsxs("div", { className: "flex flex-col flex-1 min-h-0", children: [_jsx(PageHeader, { title: node.title, onBack: onBack }), _jsx(ScrollContent, { children: _jsxs("div", { className: "flex flex-col gap-3", children: [injectedWallets.map((w) => (_jsx(InjectedWalletRow, { wallet: w, onClick: () => onInjectedWalletSelect(w) }, w.info.rdns))), node.options.map((option) => (_jsx(DeeplinkWalletRow, { option: option, onClick: () => onNavigate(option.id) }, option.id)))] }) })] }));
6
+ }
7
+ function InjectedWalletRow({ wallet, onClick, }) {
8
+ return (_jsxs("button", { onClick: onClick, className: "w-full h-16 shrink-0 flex items-center justify-between px-5 rounded-[var(--daimo-radius-lg)] bg-[var(--daimo-surface-secondary)] hover:[@media(hover:hover)]:bg-[var(--daimo-surface-hover)] transition-colors text-left", children: [_jsx("span", { className: "text-[var(--daimo-text)] font-semibold", children: wallet.info.name }), _jsx("img", { src: wallet.info.icon, alt: wallet.info.name, className: "w-8 h-8 object-contain rounded-[25%]" })] }));
9
+ }
10
+ function DeeplinkWalletRow({ option, onClick, }) {
11
+ const label = option.label ?? option.title;
12
+ const icon = "icon" in option && option.icon ? option.icon : null;
13
+ return (_jsxs("button", { onClick: onClick, className: "w-full h-16 shrink-0 flex items-center justify-between px-5 rounded-[var(--daimo-radius-lg)] bg-[var(--daimo-surface-secondary)] hover:[@media(hover:hover)]:bg-[var(--daimo-surface-hover)] transition-colors text-left", children: [_jsx("span", { className: "text-[var(--daimo-text)] font-semibold", children: label }), icon && (_jsx("img", { src: resolveIconUrl(icon), alt: label, className: "w-8 h-8 object-contain rounded-[25%]" }))] }));
14
+ }
15
+ //# sourceMappingURL=ChooseWalletPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChooseWalletPage.js","sourceRoot":"","sources":["../../../src/web/components/ChooseWalletPage.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAUxE,sFAAsF;AACtF,MAAM,UAAU,gBAAgB,CAAC,EAC/B,IAAI,EACJ,eAAe,EACf,sBAAsB,EACtB,UAAU,EACV,MAAM,GACgB;IACtB,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI,EAEjD,KAAC,aAAa,cACZ,eAAK,SAAS,EAAC,qBAAqB,aACjC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC1B,KAAC,iBAAiB,IAEhB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,GAAG,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC,IAFnC,CAAC,CAAC,IAAI,CAAC,IAAI,CAGhB,CACH,CAAC,EAED,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAC5B,KAAC,iBAAiB,IAEhB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,IAF/B,MAAM,CAAC,EAAE,CAGd,CACH,CAAC,IACE,GACQ,IACZ,CACP,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,EACzB,MAAM,EACN,OAAO,GAIR;IACC,OAAO,CACL,kBACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,0NAA0N,aAEpO,eAAM,SAAS,EAAC,wCAAwC,YACrD,MAAM,CAAC,IAAI,CAAC,IAAI,GACZ,EACP,cACE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EACrB,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EACrB,SAAS,EAAC,sCAAsC,GAChD,IACK,CACV,CAAC;AACJ,CAAC;AAED,SAAS,iBAAiB,CAAC,EACzB,MAAM,EACN,OAAO,GAIR;IACC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IAElE,OAAO,CACL,kBACE,OAAO,EAAE,OAAO,EAChB,SAAS,EAAC,0NAA0N,aAEpO,eAAM,SAAS,EAAC,wCAAwC,YAAE,KAAK,GAAQ,EACtE,IAAI,IAAI,CACP,cACE,GAAG,EAAE,cAAc,CAAC,IAAI,CAAC,EACzB,GAAG,EAAE,KAAK,EACV,SAAS,EAAC,sCAAsC,GAChD,CACH,IACM,CACV,CAAC;AACJ,CAAC"}
@@ -18,6 +18,8 @@ type ConfirmationPageProps = {
18
18
  returnLabel?: string;
19
19
  /** Back handler - only shown during "confirming" state */
20
20
  onBack?: () => void;
21
+ /** Verb for the CTA button during confirming state (e.g. "Deposit", "Pay") */
22
+ actionVerb?: string;
21
23
  };
22
24
  /**
23
25
  * Confirmation page showing payment progress.
@@ -27,6 +29,6 @@ type ConfirmationPageProps = {
27
29
  * - done: Fulfillment COMPLETED, show green checkmark
28
30
  * - refunding: Payment bounced, show spinner (future use)
29
31
  */
30
- export declare function ConfirmationPage({ sessionId, sessionState, sourceChainId, sourceTokenSymbol, sourceTokenLogoURI, sourceAmountUsd, pendingTxHash, returnUrl, returnLabel, onBack, }: ConfirmationPageProps): import("react/jsx-runtime").JSX.Element;
32
+ export declare function ConfirmationPage({ sessionId, sessionState, sourceChainId, sourceTokenSymbol, sourceTokenLogoURI, sourceAmountUsd, pendingTxHash, returnUrl, returnLabel, onBack, actionVerb, }: ConfirmationPageProps): import("react/jsx-runtime").JSX.Element;
31
33
  export {};
32
34
  //# sourceMappingURL=ConfirmationPage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmationPage.d.ts","sourceRoot":"","sources":["../../../src/web/components/ConfirmationPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAkB7D,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4BAA4B;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+BAA+B;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,SAAS,EACT,WAAW,EACX,MAAM,GACP,EAAE,qBAAqB,2CAyFvB"}
1
+ {"version":3,"file":"ConfirmationPage.d.ts","sourceRoot":"","sources":["../../../src/web/components/ConfirmationPage.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAmB7D,KAAK,qBAAqB,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,iDAAiD;IACjD,YAAY,CAAC,EAAE,aAAa,CAAC;IAC7B,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,qDAAqD;IACrD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,4BAA4B;IAC5B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+BAA+B;IAC/B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0DAA0D;IAC1D,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;IACpB,8EAA8E;IAC9E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,YAAY,EACZ,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,SAAS,EACT,WAAW,EACX,MAAM,EACN,UAAU,GACX,EAAE,qBAAqB,2CA+FvB"}
@@ -1,6 +1,7 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { getChainName } from "../../common/chain.js";
3
3
  import { useEffect, useState } from "react";
4
+ import { PrimaryButton } from "./buttons.js";
4
5
  import { ConfirmationSpinner } from "./ConfirmationSpinner.js";
5
6
  import { t } from "../hooks/locale.js";
6
7
  import { PageHeader, ShowReceiptButton, TokenIconWithChainBadge, } from "./shared.js";
@@ -12,7 +13,7 @@ import { PageHeader, ShowReceiptButton, TokenIconWithChainBadge, } from "./share
12
13
  * - done: Fulfillment COMPLETED, show green checkmark
13
14
  * - refunding: Payment bounced, show spinner (future use)
14
15
  */
15
- export function ConfirmationPage({ sessionId, sessionState, sourceChainId, sourceTokenSymbol, sourceTokenLogoURI, sourceAmountUsd, pendingTxHash, returnUrl, returnLabel, onBack, }) {
16
+ export function ConfirmationPage({ sessionId, sessionState, sourceChainId, sourceTokenSymbol, sourceTokenLogoURI, sourceAmountUsd, pendingTxHash, returnUrl, returnLabel, onBack, actionVerb, }) {
16
17
  const status = getConfirmationStatus(pendingTxHash, sessionState);
17
18
  // For processing status: show "Payment received" then change after 2s
18
19
  const [processingMessage, setProcessingMessage] = useState(t.paymentReceived);
@@ -40,7 +41,7 @@ export function ConfirmationPage({ sessionId, sessionState, sourceChainId, sourc
40
41
  ? `$${sourceAmountUsd.toFixed(2)} ${sourceTokenSymbol}`
41
42
  : sourceTokenSymbol }), _jsxs("p", { className: "text-lg text-[var(--daimo-text-secondary)]", children: [t.onChain, " ", chainName] })] })), status === "done" && returnUrl && (_jsx("a", { href: returnUrl, className: "w-full max-w-xs min-h-[44px] py-4 px-6 rounded-[var(--daimo-radius-lg)] font-semibold bg-[var(--daimo-surface-secondary)] text-[var(--daimo-text)] hover:[@media(hover:hover)]:bg-[var(--daimo-surface-hover)] active:scale-[0.97] touch-action-manipulation transition-[background-color,transform] duration-150 ease-out text-center flex items-center justify-center", children: t.returnToApp })), status === "done" && !returnUrl && returnLabel && (_jsx("p", { className: "text-center text-[var(--daimo-text-secondary)] px-8 whitespace-pre-line", children: returnLabel })), (status === "waiting" ||
42
43
  status === "processing" ||
43
- status === "done") && _jsx(ShowReceiptButton, { sessionId: sessionId })] })] }));
44
+ status === "done") && _jsx(ShowReceiptButton, { sessionId: sessionId })] }), status === "confirming" && actionVerb && (_jsx("div", { className: "px-6 pb-6 flex flex-col items-center gap-3", children: _jsx(PrimaryButton, { disabled: true, children: actionVerb }) }))] }));
44
45
  }
45
46
  /** Derive UI status from session state and pending tx hash */
46
47
  function getConfirmationStatus(pendingTxHash, sessionState) {
@@ -1 +1 @@
1
- {"version":3,"file":"ConfirmationPage.js","sourceRoot":"","sources":["../../../src/web/components/ConfirmationPage.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ConfirmationPage.js","sourceRoot":"","sources":["../../../src/web/components/ConfirmationPage.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DaimoModal.d.ts","sourceRoot":"","sources":["../../../src/web/components/DaimoModal.tsx"],"names":[],"mappings":"AAoBA,OAAO,EACL,KAAK,uBAAuB,EAG7B,MAAM,mBAAmB,CAAC;AAmB3B,MAAM,MAAM,eAAe,GAAG,uBAAuB,GAAG;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA6BF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,kDAuChD"}
1
+ {"version":3,"file":"DaimoModal.d.ts","sourceRoot":"","sources":["../../../src/web/components/DaimoModal.tsx"],"names":[],"mappings":"AAqBA,OAAO,EACL,KAAK,uBAAuB,EAG7B,MAAM,mBAAmB,CAAC;AA2B3B,MAAM,MAAM,eAAe,GAAG,uBAAuB,GAAG;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,GAAG,OAAO,CAAC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AA6BF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,kDA8DhD"}