@daimo/sdk 1.0.0-rc.2 → 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 (260) hide show
  1. package/dist/common/api.d.ts.map +1 -1
  2. package/dist/common/api.js +3 -1
  3. package/dist/common/api.js.map +1 -1
  4. package/dist/common/legacy/assert.d.ts +6 -0
  5. package/dist/common/legacy/assert.d.ts.map +1 -0
  6. package/dist/common/legacy/assert.js +25 -0
  7. package/dist/common/legacy/assert.js.map +1 -0
  8. package/dist/common/legacy/client.d.ts +67 -0
  9. package/dist/common/legacy/client.d.ts.map +1 -0
  10. package/dist/common/legacy/client.js +55 -0
  11. package/dist/common/legacy/client.js.map +1 -0
  12. package/dist/common/legacy/debug.d.ts +5 -0
  13. package/dist/common/legacy/debug.d.ts.map +1 -0
  14. package/dist/common/legacy/debug.js +21 -0
  15. package/dist/common/legacy/debug.js.map +1 -0
  16. package/dist/common/legacy/format.d.ts +16 -0
  17. package/dist/common/legacy/format.d.ts.map +1 -0
  18. package/dist/common/legacy/format.js +34 -0
  19. package/dist/common/legacy/format.js.map +1 -0
  20. package/dist/common/legacy/index.d.ts +11 -0
  21. package/dist/common/legacy/index.d.ts.map +1 -0
  22. package/dist/common/legacy/index.js +11 -0
  23. package/dist/common/legacy/index.js.map +1 -0
  24. package/dist/common/legacy/primitiveTypes.d.ts +11 -0
  25. package/dist/common/legacy/primitiveTypes.d.ts.map +1 -0
  26. package/dist/common/legacy/primitiveTypes.js +14 -0
  27. package/dist/common/legacy/primitiveTypes.js.map +1 -0
  28. package/dist/common/legacy/session.d.ts +246 -0
  29. package/dist/common/legacy/session.d.ts.map +1 -0
  30. package/dist/common/legacy/session.js +124 -0
  31. package/dist/common/legacy/session.js.map +1 -0
  32. package/dist/common/legacy/try.d.ts +4 -0
  33. package/dist/common/legacy/try.d.ts.map +1 -0
  34. package/dist/common/legacy/try.js +26 -0
  35. package/dist/common/legacy/try.js.map +1 -0
  36. package/dist/common/primitives.d.ts +2 -2
  37. package/dist/common/primitives.d.ts.map +1 -1
  38. package/dist/common/primitives.js +13 -4
  39. package/dist/common/primitives.js.map +1 -1
  40. package/dist/common/session.d.ts +2 -0
  41. package/dist/common/session.d.ts.map +1 -1
  42. package/dist/common/session.js +4 -0
  43. package/dist/common/session.js.map +1 -1
  44. package/dist/hooks/DaimoClientContext.d.ts +7 -0
  45. package/dist/hooks/DaimoClientContext.d.ts.map +1 -0
  46. package/dist/hooks/DaimoClientContext.js +15 -0
  47. package/dist/hooks/DaimoClientContext.js.map +1 -0
  48. package/dist/hooks/formatUserError.d.ts +3 -0
  49. package/dist/hooks/formatUserError.d.ts.map +1 -0
  50. package/dist/hooks/formatUserError.js +30 -0
  51. package/dist/hooks/formatUserError.js.map +1 -0
  52. package/dist/hooks/index.d.ts +12 -0
  53. package/dist/hooks/index.d.ts.map +1 -0
  54. package/dist/hooks/index.js +9 -0
  55. package/dist/hooks/index.js.map +1 -0
  56. package/dist/hooks/locale.d.ts +7 -0
  57. package/dist/hooks/locale.d.ts.map +1 -0
  58. package/dist/hooks/locale.js +15 -0
  59. package/dist/hooks/locale.js.map +1 -0
  60. package/dist/hooks/locales/en.d.ts +60 -0
  61. package/dist/hooks/locales/en.d.ts.map +1 -0
  62. package/dist/hooks/locales/en.js +76 -0
  63. package/dist/hooks/locales/en.js.map +1 -0
  64. package/dist/hooks/locales/es.d.ts +4 -0
  65. package/dist/hooks/locales/es.d.ts.map +1 -0
  66. package/dist/hooks/locales/es.js +60 -0
  67. package/dist/hooks/locales/es.js.map +1 -0
  68. package/dist/hooks/navEvent.d.ts +60 -0
  69. package/dist/hooks/navEvent.d.ts.map +1 -0
  70. package/dist/hooks/navEvent.js +16 -0
  71. package/dist/hooks/navEvent.js.map +1 -0
  72. package/dist/hooks/types.d.ts +71 -0
  73. package/dist/hooks/types.d.ts.map +1 -0
  74. package/dist/hooks/types.js +14 -0
  75. package/dist/hooks/types.js.map +1 -0
  76. package/dist/hooks/usePaymentCallbacks.d.ts +15 -0
  77. package/dist/hooks/usePaymentCallbacks.d.ts.map +1 -0
  78. package/dist/hooks/usePaymentCallbacks.js +27 -0
  79. package/dist/hooks/usePaymentCallbacks.js.map +1 -0
  80. package/dist/hooks/useSessionNav.d.ts +31 -0
  81. package/dist/hooks/useSessionNav.d.ts.map +1 -0
  82. package/dist/hooks/useSessionNav.js +439 -0
  83. package/dist/hooks/useSessionNav.js.map +1 -0
  84. package/dist/hooks/useSessionPolling.d.ts +10 -0
  85. package/dist/hooks/useSessionPolling.d.ts.map +1 -0
  86. package/dist/hooks/useSessionPolling.js +61 -0
  87. package/dist/hooks/useSessionPolling.js.map +1 -0
  88. package/dist/web/ChooseOptionPage.d.ts +9 -0
  89. package/dist/web/ChooseOptionPage.d.ts.map +1 -0
  90. package/dist/web/ChooseOptionPage.js +51 -0
  91. package/dist/web/ChooseOptionPage.js.map +1 -0
  92. package/dist/web/ConfirmationPage.d.ts +32 -0
  93. package/dist/web/ConfirmationPage.d.ts.map +1 -0
  94. package/dist/web/ConfirmationPage.js +72 -0
  95. package/dist/web/ConfirmationPage.js.map +1 -0
  96. package/dist/web/ConfirmationSpinner.d.ts +7 -0
  97. package/dist/web/ConfirmationSpinner.d.ts.map +1 -0
  98. package/dist/web/ConfirmationSpinner.js +20 -0
  99. package/dist/web/ConfirmationSpinner.js.map +1 -0
  100. package/dist/web/DaimoModal.d.ts +15 -0
  101. package/dist/web/DaimoModal.d.ts.map +1 -0
  102. package/dist/web/DaimoModal.js +283 -0
  103. package/dist/web/DaimoModal.js.map +1 -0
  104. package/dist/web/DeeplinkPage.d.ts +8 -0
  105. package/dist/web/DeeplinkPage.d.ts.map +1 -0
  106. package/dist/web/DeeplinkPage.js +13 -0
  107. package/dist/web/DeeplinkPage.js.map +1 -0
  108. package/dist/web/ErrorPage.d.ts +28 -0
  109. package/dist/web/ErrorPage.d.ts.map +1 -0
  110. package/dist/web/ErrorPage.js +47 -0
  111. package/dist/web/ErrorPage.js.map +1 -0
  112. package/dist/web/ExchangePage.d.ts +11 -0
  113. package/dist/web/ExchangePage.d.ts.map +1 -0
  114. package/dist/web/ExchangePage.js +13 -0
  115. package/dist/web/ExchangePage.js.map +1 -0
  116. package/dist/web/ExpiredPage.d.ts +9 -0
  117. package/dist/web/ExpiredPage.d.ts.map +1 -0
  118. package/dist/web/ExpiredPage.js +12 -0
  119. package/dist/web/ExpiredPage.js.map +1 -0
  120. package/dist/web/ModalSkeleton.d.ts +7 -0
  121. package/dist/web/ModalSkeleton.d.ts.map +1 -0
  122. package/dist/web/ModalSkeleton.js +13 -0
  123. package/dist/web/ModalSkeleton.js.map +1 -0
  124. package/dist/web/ProgressDots.d.ts +16 -0
  125. package/dist/web/ProgressDots.d.ts.map +1 -0
  126. package/dist/web/ProgressDots.js +55 -0
  127. package/dist/web/ProgressDots.js.map +1 -0
  128. package/dist/web/QRCode.d.ts +7 -0
  129. package/dist/web/QRCode.d.ts.map +1 -0
  130. package/dist/web/QRCode.js +69 -0
  131. package/dist/web/QRCode.js.map +1 -0
  132. package/dist/web/SelectAmountPage.d.ts +21 -0
  133. package/dist/web/SelectAmountPage.d.ts.map +1 -0
  134. package/dist/web/SelectAmountPage.js +27 -0
  135. package/dist/web/SelectAmountPage.js.map +1 -0
  136. package/dist/web/SelectTokenPage.d.ts +14 -0
  137. package/dist/web/SelectTokenPage.d.ts.map +1 -0
  138. package/dist/web/SelectTokenPage.js +71 -0
  139. package/dist/web/SelectTokenPage.js.map +1 -0
  140. package/dist/web/WaitingDepositAddressPage.d.ts +14 -0
  141. package/dist/web/WaitingDepositAddressPage.d.ts.map +1 -0
  142. package/dist/web/WaitingDepositAddressPage.js +126 -0
  143. package/dist/web/WaitingDepositAddressPage.js.map +1 -0
  144. package/dist/web/WalletAmountPage.d.ts +10 -0
  145. package/dist/web/WalletAmountPage.d.ts.map +1 -0
  146. package/dist/web/WalletAmountPage.js +158 -0
  147. package/dist/web/WalletAmountPage.js.map +1 -0
  148. package/dist/web/api/navTree.d.ts +1 -0
  149. package/dist/web/api/navTree.d.ts.map +1 -1
  150. package/dist/web/buttons.d.ts +15 -0
  151. package/dist/web/buttons.d.ts.map +1 -0
  152. package/dist/web/buttons.js +24 -0
  153. package/dist/web/buttons.js.map +1 -0
  154. package/dist/web/components/ChooseChainPage.d.ts +9 -0
  155. package/dist/web/components/ChooseChainPage.d.ts.map +1 -0
  156. package/dist/web/components/ChooseChainPage.js +10 -0
  157. package/dist/web/components/ChooseChainPage.js.map +1 -0
  158. package/dist/web/components/ChooseOptionPage.d.ts.map +1 -1
  159. package/dist/web/components/ChooseOptionPage.js +2 -10
  160. package/dist/web/components/ChooseOptionPage.js.map +1 -1
  161. package/dist/web/components/ChooseWalletPage.d.ts +13 -0
  162. package/dist/web/components/ChooseWalletPage.d.ts.map +1 -0
  163. package/dist/web/components/ChooseWalletPage.js +15 -0
  164. package/dist/web/components/ChooseWalletPage.js.map +1 -0
  165. package/dist/web/components/ConfirmationPage.d.ts +3 -1
  166. package/dist/web/components/ConfirmationPage.d.ts.map +1 -1
  167. package/dist/web/components/ConfirmationPage.js +3 -2
  168. package/dist/web/components/ConfirmationPage.js.map +1 -1
  169. package/dist/web/components/DaimoModal.d.ts.map +1 -1
  170. package/dist/web/components/DaimoModal.js +72 -137
  171. package/dist/web/components/DaimoModal.js.map +1 -1
  172. package/dist/web/components/DeeplinkPage.d.ts +1 -0
  173. package/dist/web/components/DeeplinkPage.d.ts.map +1 -1
  174. package/dist/web/components/DeeplinkPage.js +13 -2
  175. package/dist/web/components/DeeplinkPage.js.map +1 -1
  176. package/dist/web/components/ExchangePage.js +2 -2
  177. package/dist/web/components/ExchangePage.js.map +1 -1
  178. package/dist/web/components/ExpiredPage.d.ts +2 -1
  179. package/dist/web/components/ExpiredPage.d.ts.map +1 -1
  180. package/dist/web/components/ExpiredPage.js +3 -3
  181. package/dist/web/components/ExpiredPage.js.map +1 -1
  182. package/dist/web/components/SelectTokenPage.d.ts +2 -1
  183. package/dist/web/components/SelectTokenPage.d.ts.map +1 -1
  184. package/dist/web/components/SelectTokenPage.js +5 -9
  185. package/dist/web/components/SelectTokenPage.js.map +1 -1
  186. package/dist/web/components/WalletAmountPage.js +1 -1
  187. package/dist/web/components/WalletAmountPage.js.map +1 -1
  188. package/dist/web/components/containers.d.ts.map +1 -1
  189. package/dist/web/components/containers.js +6 -2
  190. package/dist/web/components/containers.js.map +1 -1
  191. package/dist/web/components/shared.d.ts +9 -4
  192. package/dist/web/components/shared.d.ts.map +1 -1
  193. package/dist/web/components/shared.js +13 -4
  194. package/dist/web/components/shared.js.map +1 -1
  195. package/dist/web/containers.d.ts +19 -0
  196. package/dist/web/containers.d.ts.map +1 -0
  197. package/dist/web/containers.js +77 -0
  198. package/dist/web/containers.js.map +1 -0
  199. package/dist/web/hooks/locales/en.d.ts +2 -0
  200. package/dist/web/hooks/locales/en.d.ts.map +1 -1
  201. package/dist/web/hooks/locales/en.js +2 -0
  202. package/dist/web/hooks/locales/en.js.map +1 -1
  203. package/dist/web/hooks/locales/es.d.ts.map +1 -1
  204. package/dist/web/hooks/locales/es.js +2 -0
  205. package/dist/web/hooks/locales/es.js.map +1 -1
  206. package/dist/web/hooks/types.d.ts +8 -0
  207. package/dist/web/hooks/types.d.ts.map +1 -1
  208. package/dist/web/hooks/types.js.map +1 -1
  209. package/dist/web/hooks/useDepositAddress.d.ts +7 -0
  210. package/dist/web/hooks/useDepositAddress.d.ts.map +1 -0
  211. package/dist/web/hooks/useDepositAddress.js +36 -0
  212. package/dist/web/hooks/useDepositAddress.js.map +1 -0
  213. package/dist/web/hooks/useInjectedWallets.d.ts +14 -0
  214. package/dist/web/hooks/useInjectedWallets.d.ts.map +1 -0
  215. package/dist/web/hooks/useInjectedWallets.js +67 -0
  216. package/dist/web/hooks/useInjectedWallets.js.map +1 -0
  217. package/dist/web/hooks/usePaymentCallbacks.d.ts.map +1 -1
  218. package/dist/web/hooks/usePaymentCallbacks.js +2 -3
  219. package/dist/web/hooks/usePaymentCallbacks.js.map +1 -1
  220. package/dist/web/hooks/useSessionNav.d.ts +5 -3
  221. package/dist/web/hooks/useSessionNav.d.ts.map +1 -1
  222. package/dist/web/hooks/useSessionNav.js +111 -30
  223. package/dist/web/hooks/useSessionNav.js.map +1 -1
  224. package/dist/web/hooks/useSessionPolling.d.ts +1 -1
  225. package/dist/web/hooks/useSessionPolling.d.ts.map +1 -1
  226. package/dist/web/hooks/useSessionPolling.js +14 -19
  227. package/dist/web/hooks/useSessionPolling.js.map +1 -1
  228. package/dist/web/hooks/useWalletFlow.d.ts +4 -0
  229. package/dist/web/hooks/useWalletFlow.d.ts.map +1 -1
  230. package/dist/web/hooks/useWalletFlow.js +66 -11
  231. package/dist/web/hooks/useWalletFlow.js.map +1 -1
  232. package/dist/web/hooks/walletProvider.d.ts +2 -0
  233. package/dist/web/hooks/walletProvider.d.ts.map +1 -1
  234. package/dist/web/hooks/walletProvider.js +9 -0
  235. package/dist/web/hooks/walletProvider.js.map +1 -1
  236. package/dist/web/icons.d.ts +22 -0
  237. package/dist/web/icons.d.ts.map +1 -0
  238. package/dist/web/icons.js +33 -0
  239. package/dist/web/icons.js.map +1 -0
  240. package/dist/web/index.d.ts +3 -0
  241. package/dist/web/index.d.ts.map +1 -1
  242. package/dist/web/index.js +2 -0
  243. package/dist/web/index.js.map +1 -1
  244. package/dist/web/shared.d.ts +93 -0
  245. package/dist/web/shared.d.ts.map +1 -0
  246. package/dist/web/shared.js +202 -0
  247. package/dist/web/shared.js.map +1 -0
  248. package/dist/web/useCopyToClipboard.d.ts +6 -0
  249. package/dist/web/useCopyToClipboard.d.ts.map +1 -0
  250. package/dist/web/useCopyToClipboard.js +20 -0
  251. package/dist/web/useCopyToClipboard.js.map +1 -0
  252. package/dist/web/useWalletFlow.d.ts +23 -0
  253. package/dist/web/useWalletFlow.d.ts.map +1 -0
  254. package/dist/web/useWalletFlow.js +334 -0
  255. package/dist/web/useWalletFlow.js.map +1 -0
  256. package/dist/web/walletProvider.d.ts +34 -0
  257. package/dist/web/walletProvider.d.ts.map +1 -0
  258. package/dist/web/walletProvider.js +14 -0
  259. package/dist/web/walletProvider.js.map +1 -0
  260. package/package.json +2 -1
@@ -0,0 +1,72 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { getChainName } from "../common/chain.js";
3
+ import { useEffect, useState } from "react";
4
+ import { ConfirmationSpinner } from "./ConfirmationSpinner.js";
5
+ import { t } from "../hooks/locale.js";
6
+ import { PageHeader, ShowReceiptButton, TokenIconWithChainBadge, } from "./shared.js";
7
+ /**
8
+ * Confirmation page showing payment progress.
9
+ * - confirming: Wallet popup open, show source token icon
10
+ * - waiting: Tx submitted, show source token icon
11
+ * - processing: Fulfillment STARTED, show spinner
12
+ * - done: Fulfillment COMPLETED, show green checkmark
13
+ * - refunding: Payment bounced, show spinner (future use)
14
+ */
15
+ export function ConfirmationPage({ sessionId, sessionState, sourceChainId, sourceTokenSymbol, sourceTokenLogoURI, sourceAmountUsd, pendingTxHash, returnUrl, returnLabel, onBack, }) {
16
+ const status = getConfirmationStatus(pendingTxHash, sessionState);
17
+ // For processing status: show "Payment received" then change after 2s
18
+ const [processingMessage, setProcessingMessage] = useState(t.paymentReceived);
19
+ useEffect(() => {
20
+ if (status === "processing") {
21
+ const timer = setTimeout(() => {
22
+ setProcessingMessage(t.processingYourPayment);
23
+ }, 2000);
24
+ return () => clearTimeout(timer);
25
+ }
26
+ }, [status]);
27
+ // Show source token info (amount, chain) when we have basic data
28
+ const showSourceInfo = (status === "confirming" || status === "waiting") &&
29
+ sourceChainId != null &&
30
+ sourceTokenSymbol != null;
31
+ // Show token icon only when we also have a logo URI
32
+ const showSourceIcon = showSourceInfo && sourceTokenLogoURI != null;
33
+ // Show back button only during confirming (before tx submitted)
34
+ const showBack = status === "confirming" && onBack != null;
35
+ // Get display title based on status
36
+ const displayTitle = getDisplayTitle(status, processingMessage);
37
+ // Chain name for display
38
+ const chainName = sourceChainId ? getChainName(sourceChainId) : "";
39
+ return (_jsxs("div", { className: "flex flex-col flex-1 min-h-0", children: [_jsx(PageHeader, { onBack: showBack ? onBack : undefined, title: displayTitle }), _jsxs("div", { className: "flex-1 flex flex-col items-center justify-center p-6 gap-4", children: [showSourceIcon && (_jsx(TokenIconWithChainBadge, { chainId: sourceChainId, symbol: sourceTokenSymbol, logoURI: sourceTokenLogoURI, size: "lg" })), status !== "confirming" && status !== "waiting" && (_jsx(ConfirmationSpinner, { done: status === "done" })), showSourceInfo && (_jsxs("div", { className: "text-center", children: [_jsx("p", { className: "text-3xl font-semibold text-[var(--daimo-text)] tabular-nums", children: sourceAmountUsd != null
40
+ ? `$${sourceAmountUsd.toFixed(2)} ${sourceTokenSymbol}`
41
+ : 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
+ status === "processing" ||
43
+ status === "done") && _jsx(ShowReceiptButton, { sessionId: sessionId })] })] }));
44
+ }
45
+ /** Derive UI status from session state and pending tx hash */
46
+ function getConfirmationStatus(pendingTxHash, sessionState) {
47
+ if (sessionState === "processing")
48
+ return "processing";
49
+ if (sessionState === "completed")
50
+ return "done";
51
+ if (sessionState === "bounced")
52
+ return "refunding";
53
+ if (pendingTxHash)
54
+ return "waiting";
55
+ return "confirming";
56
+ }
57
+ /** Get display title for status */
58
+ function getDisplayTitle(status, processingMessage) {
59
+ switch (status) {
60
+ case "confirming":
61
+ return t.confirmYourPayment;
62
+ case "waiting":
63
+ return t.waitingForYourPayment;
64
+ case "processing":
65
+ return processingMessage;
66
+ case "done":
67
+ return t.paymentCompleted;
68
+ case "refunding":
69
+ return t.refundingYourPayment;
70
+ }
71
+ }
72
+ //# sourceMappingURL=ConfirmationPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmationPage.js","sourceRoot":"","sources":["../../src/web/ConfirmationPage.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ type ConfirmationSpinnerProps = {
2
+ done: boolean;
3
+ };
4
+ /** Spinner → checkmark transition for payment confirmation. */
5
+ export declare function ConfirmationSpinner({ done }: ConfirmationSpinnerProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
7
+ //# sourceMappingURL=ConfirmationSpinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmationSpinner.d.ts","sourceRoot":"","sources":["../../src/web/ConfirmationSpinner.tsx"],"names":[],"mappings":"AAAA,KAAK,wBAAwB,GAAG;IAC9B,IAAI,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,EAAE,IAAI,EAAE,EAAE,wBAAwB,2CAyBrE"}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /** Spinner → checkmark transition for payment confirmation. */
3
+ export function ConfirmationSpinner({ done }) {
4
+ return (_jsx("div", { className: "relative w-[100px] h-[100px]", children: _jsxs("div", { className: "absolute inset-[6px] rounded-full flex items-center justify-center overflow-hidden", style: { backgroundColor: "var(--daimo-bg)" }, children: [_jsx(LoadingCircle, { className: `absolute w-full h-full transition-opacity duration-200 ${done ? "opacity-0" : "opacity-100"}`, spinning: !done }), _jsx(TickIcon, { className: `absolute w-full h-full transition-[opacity,transform] duration-200 ${done ? "opacity-100 scale-100" : "opacity-0 scale-50"}`, style: { color: "var(--daimo-checkmark)" } })] }) }));
5
+ }
6
+ function LoadingCircle({ className, spinning, }) {
7
+ return (_jsxs("svg", { className: className, style: {
8
+ color: "var(--daimo-accent)",
9
+ animation: spinning ? "spin 400ms linear infinite" : "none",
10
+ }, viewBox: "0 0 100 100", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: [_jsx("style", { children: `
11
+ @keyframes spin {
12
+ from { transform: rotate(0deg); }
13
+ to { transform: rotate(360deg); }
14
+ }
15
+ ` }), _jsx("circle", { cx: "50", cy: "50", r: "50", fill: "currentColor", fillOpacity: "0.15" }), _jsx("circle", { cx: "50", cy: "50", r: "30", stroke: "currentColor", strokeOpacity: "0.4", strokeWidth: "16" }), _jsx("path", { d: "M50 20V20C66.5685 20 80 33.4315 80 50V50", stroke: "currentColor", strokeWidth: "16", strokeLinecap: "round", strokeLinejoin: "round" })] }));
16
+ }
17
+ function TickIcon({ className, style, }) {
18
+ return (_jsx("svg", { className: className, style: style, viewBox: "0 0 18 18", fill: "none", xmlns: "http://www.w3.org/2000/svg", "aria-hidden": "true", children: _jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M9 18C13.9706 18 18 13.9706 18 9C18 4.02944 13.9706 0 9 0C4.02944 0 0 4.02944 0 9C0 13.9706 4.02944 18 9 18ZM13.274 7.13324C13.6237 6.70579 13.5607 6.07577 13.1332 5.72604C12.7058 5.37632 12.0758 5.43932 11.726 5.86676L7.92576 10.5115L6.20711 8.79289C5.81658 8.40237 5.18342 8.40237 4.79289 8.79289C4.40237 9.18342 4.40237 9.81658 4.79289 10.2071L7.29289 12.7071C7.49267 12.9069 7.76764 13.0128 8.04981 12.9988C8.33199 12.9847 8.59505 12.8519 8.77396 12.6332L13.274 7.13324Z", fill: "currentColor" }) }));
19
+ }
20
+ //# sourceMappingURL=ConfirmationSpinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ConfirmationSpinner.js","sourceRoot":"","sources":["../../src/web/ConfirmationSpinner.tsx"],"names":[],"mappings":";AAIA,+DAA+D;AAC/D,MAAM,UAAU,mBAAmB,CAAC,EAAE,IAAI,EAA4B;IACpE,OAAO,CACL,cAAK,SAAS,EAAC,8BAA8B,YAC3C,eACE,SAAS,EAAC,oFAAoF,EAC9F,KAAK,EAAE,EAAE,eAAe,EAAE,iBAAiB,EAAE,aAG7C,KAAC,aAAa,IACZ,SAAS,EAAE,0DACT,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aACvB,EAAE,EACF,QAAQ,EAAE,CAAC,IAAI,GACf,EAGF,KAAC,QAAQ,IACP,SAAS,EAAE,sEACT,IAAI,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,oBACnC,EAAE,EACF,KAAK,EAAE,EAAE,KAAK,EAAE,wBAAwB,EAAE,GAC1C,IACE,GACF,CACP,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,EACrB,SAAS,EACT,QAAQ,GAIT;IACC,OAAO,CACL,eACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE;YACL,KAAK,EAAE,qBAAqB;YAC5B,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,4BAA4B,CAAC,CAAC,CAAC,MAAM;SAC5D,EACD,OAAO,EAAC,aAAa,EACrB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,iBACtB,MAAM,aAElB,0BAAQ;;;;;OAKP,GAAS,EACV,iBAAQ,EAAE,EAAC,IAAI,EAAC,EAAE,EAAC,IAAI,EAAC,CAAC,EAAC,IAAI,EAAC,IAAI,EAAC,cAAc,EAAC,WAAW,EAAC,MAAM,GAAG,EACxE,iBACE,EAAE,EAAC,IAAI,EACP,EAAE,EAAC,IAAI,EACP,CAAC,EAAC,IAAI,EACN,MAAM,EAAC,cAAc,EACrB,aAAa,EAAC,KAAK,EACnB,WAAW,EAAC,IAAI,GAChB,EACF,eACE,CAAC,EAAC,0CAA0C,EAC5C,MAAM,EAAC,cAAc,EACrB,WAAW,EAAC,IAAI,EAChB,aAAa,EAAC,OAAO,EACrB,cAAc,EAAC,OAAO,GACtB,IACE,CACP,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,EAChB,SAAS,EACT,KAAK,GAIN;IACC,OAAO,CACL,cACE,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,KAAK,EACZ,OAAO,EAAC,WAAW,EACnB,IAAI,EAAC,MAAM,EACX,KAAK,EAAC,4BAA4B,iBACtB,MAAM,YAElB,eACE,QAAQ,EAAC,SAAS,EAClB,QAAQ,EAAC,SAAS,EAClB,CAAC,EAAC,4dAA4d,EAC9d,IAAI,EAAC,cAAc,GACnB,GACE,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import type { ModalSession } from "../common/legacy/session.js";
2
+ import { type DaimoModalEventHandlers } from "../hooks/types.js";
3
+ export type DaimoModalProps = DaimoModalEventHandlers & {
4
+ session: ModalSession | null;
5
+ defaultOpen?: boolean;
6
+ connectedWalletOnly?: boolean;
7
+ embedded?: boolean;
8
+ animate?: boolean;
9
+ maxHeight?: number;
10
+ platform?: "ios" | "android" | "other";
11
+ returnUrl?: string;
12
+ returnLabel?: string;
13
+ };
14
+ export declare function DaimoModal(props: DaimoModalProps): import("react/jsx-runtime").JSX.Element | null;
15
+ //# sourceMappingURL=DaimoModal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DaimoModal.d.ts","sourceRoot":"","sources":["../../src/web/DaimoModal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAQb,MAAM,6BAA6B,CAAC;AAWrC,OAAO,EACL,KAAK,uBAAuB,EAG7B,MAAM,mBAAmB,CAAC;AAmB3B,MAAM,MAAM,eAAe,GAAG,uBAAuB,GAAG;IACtD,OAAO,EAAE,YAAY,GAAG,IAAI,CAAC;IAC7B,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;AA4BF,wBAAgB,UAAU,CAAC,KAAK,EAAE,eAAe,kDA6BhD"}
@@ -0,0 +1,283 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { tron } from "../common/chain.js";
3
+ import { useCallback, useEffect, useRef, useState } from "react";
4
+ import { formatUserError } from "../hooks/formatUserError.js";
5
+ import { t } from "../hooks/locale.js";
6
+ import { createNavLogger } from "../hooks/navEvent.js";
7
+ import { usePaymentCallbacks } from "../hooks/usePaymentCallbacks.js";
8
+ import { useSessionNav } from "../hooks/useSessionNav.js";
9
+ import { useSessionPolling } from "../hooks/useSessionPolling.js";
10
+ import { useDaimoClient } from "../hooks/DaimoClientContext.js";
11
+ import { findNode, } from "../hooks/types.js";
12
+ import { PrimaryButton } from "./buttons.js";
13
+ import { ChooseOptionPage } from "./ChooseOptionPage.js";
14
+ import { ConfirmationPage } from "./ConfirmationPage.js";
15
+ import { EmbeddedContainer, ModalContainer } from "./containers.js";
16
+ import { DeeplinkPage } from "./DeeplinkPage.js";
17
+ import { ExchangePage } from "./ExchangePage.js";
18
+ import { ExpiredPage } from "./ExpiredPage.js";
19
+ import { SelectAmountPage } from "./SelectAmountPage.js";
20
+ import { SelectTokenPage } from "./SelectTokenPage.js";
21
+ import { ContactSupportButton, ErrorMessage as SharedErrorMessage, } from "./shared.js";
22
+ import { useWalletFlow, isUserRejection } from "./useWalletFlow.js";
23
+ import { WaitingDepositAddressPage } from "./WaitingDepositAddressPage.js";
24
+ import { WalletAmountPage } from "./WalletAmountPage.js";
25
+ function useModalCloseHandler(sessionId, getNodeCtx, isOpen, setIsOpen, onClose) {
26
+ const client = useDaimoClient();
27
+ const logNavEvent = createNavLogger(client);
28
+ useEffect(() => {
29
+ if (!isOpen)
30
+ return;
31
+ logNavEvent(sessionId, { ...getNodeCtx(), action: "nav_open" });
32
+ }, [isOpen, sessionId, getNodeCtx]);
33
+ const handleClose = useCallback(() => {
34
+ logNavEvent(sessionId, { ...getNodeCtx(), action: "nav_close" });
35
+ setIsOpen(false);
36
+ onClose?.();
37
+ }, [sessionId, getNodeCtx, setIsOpen, onClose]);
38
+ return { handleClose };
39
+ }
40
+ export function DaimoModal(props) {
41
+ const { session, embedded = false, animate = true, defaultOpen = true, maxHeight, } = props;
42
+ const [isOpen, setIsOpen] = useState(defaultOpen);
43
+ if (!session) {
44
+ if (!isOpen)
45
+ return null;
46
+ const skeleton = _jsx(SkeletonContent, {});
47
+ if (embedded)
48
+ return _jsx(EmbeddedContainer, { children: skeleton });
49
+ return (_jsx(ModalContainer, { animate: animate, maxHeight: maxHeight, children: skeleton }));
50
+ }
51
+ return (_jsx(DaimoModalInner, { ...props, session: session, isOpen: isOpen, setIsOpen: setIsOpen }));
52
+ }
53
+ const CONNECTED_WALLET_NAV = [
54
+ { type: "ConnectedWallet", id: "ConnectedWallet", title: "Connected Wallet" },
55
+ ];
56
+ function DaimoModalInner({ session: initialSession, isOpen, setIsOpen, connectedWalletOnly = false, embedded = false, animate = true, maxHeight, platform, returnUrl, returnLabel, onPaymentStarted, onPaymentCompleted, onOpen, onClose, }) {
57
+ const effectiveInitial = connectedWalletOnly
58
+ ? { ...initialSession, navTree: CONNECTED_WALLET_NAV }
59
+ : initialSession;
60
+ const { session, setSession } = useSessionPolling(effectiveInitial, isOpen);
61
+ const nav = useSessionNav(session, setSession, platform);
62
+ const hasConnectedWallet = session.navTree.some((n) => n.type === "ConnectedWallet");
63
+ const walletFlow = useWalletFlow(session.sessionId, session.receivers.evm.address, hasConnectedWallet);
64
+ const autoNavRef = useRef(null);
65
+ useEffect(() => {
66
+ if (!isOpen)
67
+ return;
68
+ if (nav.topEntry &&
69
+ nav.topEntry.type !== "choose-option" &&
70
+ nav.topEntry.type !== "deeplink") {
71
+ return;
72
+ }
73
+ const currentNodeId = nav.topEntry?.nodeId;
74
+ let node = currentNodeId
75
+ ? findNode(currentNodeId, session.navTree)
76
+ : (session.navTree[0] ?? null);
77
+ let targetId = null;
78
+ while (node?.type === "ChooseOption") {
79
+ const chooseNode = node;
80
+ if (chooseNode.options?.length !== 1)
81
+ break;
82
+ targetId = chooseNode.options[0].id;
83
+ node = findNode(targetId, session.navTree);
84
+ }
85
+ if (!targetId && node && node.type !== "ChooseOption") {
86
+ targetId = node.id;
87
+ }
88
+ if (targetId && autoNavRef.current !== targetId) {
89
+ autoNavRef.current = targetId;
90
+ nav.handleNavigate(targetId, { autoNav: true });
91
+ }
92
+ }, [isOpen, nav, session.navTree]);
93
+ useEffect(() => {
94
+ if (nav.topEntry?.type !== "wallet-connect")
95
+ return;
96
+ if (walletFlow.isConnecting || !walletFlow.wallet)
97
+ return;
98
+ nav.handleWalletConnected();
99
+ }, [nav.topEntry, walletFlow.wallet, walletFlow.isConnecting, nav]);
100
+ const sendingRef = useRef(null);
101
+ useEffect(() => {
102
+ if (nav.topEntry?.type !== "wallet-sending")
103
+ return;
104
+ if (nav.topEntry.txHash || nav.topEntry.error)
105
+ return;
106
+ const sendKey = `${nav.topEntry.nodeId}-${nav.topEntry.amountUsd}`;
107
+ if (sendingRef.current === sendKey)
108
+ return;
109
+ sendingRef.current = sendKey;
110
+ const { token, amountUsd } = nav.topEntry;
111
+ walletFlow
112
+ .sendTransaction(token, amountUsd)
113
+ .then(({ txHash }) => {
114
+ nav.handleWalletTxResult(txHash);
115
+ sendingRef.current = null;
116
+ })
117
+ .catch((err) => {
118
+ sendingRef.current = null;
119
+ if (isUserRejection(err)) {
120
+ nav.handleBack();
121
+ return;
122
+ }
123
+ nav.handleWalletTxResult(undefined, formatUserError(err, t.transactionFailed));
124
+ });
125
+ }, [nav, walletFlow]);
126
+ const { handleClose } = useModalCloseHandler(session.sessionId, nav.getNodeCtx, isOpen, setIsOpen, onClose);
127
+ usePaymentCallbacks(session, isOpen, {
128
+ onOpen,
129
+ onPaymentStarted,
130
+ onPaymentCompleted,
131
+ });
132
+ if (!isOpen)
133
+ return null;
134
+ const isTerminal = session.status === "expired" ||
135
+ session.status === "completed" ||
136
+ session.status === "bounced";
137
+ const pageKey = isTerminal
138
+ ? session.status
139
+ : `${nav.topEntry?.type ?? "root"}-${nav.topEntry?.nodeId ?? ""}`;
140
+ const renderInContainer = (content, showFooterSpacer = true) => {
141
+ const page = (_jsx("div", { className: "daimo-page-enter flex-1 min-h-0 flex flex-col", children: content }, pageKey));
142
+ if (embedded) {
143
+ return (_jsx(EmbeddedContainer, { showFooterSpacer: showFooterSpacer, children: page }));
144
+ }
145
+ return (_jsx(ModalContainer, { showFooterSpacer: showFooterSpacer, onClose: handleClose, animate: animate, pageKey: pageKey, maxHeight: maxHeight, children: page }));
146
+ };
147
+ if (session.status === "expired") {
148
+ return renderInContainer(_jsx(ExpiredPage, { onClose: handleClose }));
149
+ }
150
+ if (session.status === "processing" ||
151
+ session.status === "completed" ||
152
+ session.status === "bounced") {
153
+ return renderInContainer(_jsx(ConfirmationPage, { sessionId: session.sessionId, sessionState: session.status, returnUrl: returnUrl, returnLabel: returnLabel }));
154
+ }
155
+ const content = renderEntry(nav.topEntry, {
156
+ session,
157
+ canGoBack: nav.canGoBack,
158
+ onNavigate: nav.handleNavigate,
159
+ onBack: nav.handleBack,
160
+ onAmountContinue: nav.handleAmountContinue,
161
+ onRetry: nav.handleRetry,
162
+ onRefresh: nav.handleRefresh,
163
+ walletFlow,
164
+ onWalletSelectToken: nav.handleWalletSelectToken,
165
+ onWalletSending: nav.handleWalletSending,
166
+ });
167
+ const showFooterSpacer = !(!nav.topEntry ||
168
+ (nav.topEntry.type === "choose-option" && !nav.canGoBack));
169
+ return renderInContainer(content, showFooterSpacer);
170
+ }
171
+ function renderEntry(entry, ctx) {
172
+ if (!entry) {
173
+ const rootNode = ctx.session.navTree[0];
174
+ if (!rootNode)
175
+ return _jsx(LoadingMessage, {});
176
+ if (rootNode.type === "ChooseOption") {
177
+ return (_jsx(ChooseOptionPage, { node: rootNode, onNavigate: ctx.onNavigate, onBack: null }));
178
+ }
179
+ return null;
180
+ }
181
+ switch (entry.type) {
182
+ case "choose-option": {
183
+ const node = findNode(entry.nodeId, ctx.session.navTree);
184
+ if (!node)
185
+ return null;
186
+ return (_jsx(ChooseOptionPage, { node: node, onNavigate: ctx.onNavigate, onBack: ctx.canGoBack ? ctx.onBack : null }));
187
+ }
188
+ case "deeplink": {
189
+ const node = findNode(entry.nodeId, ctx.session.navTree);
190
+ if (!node)
191
+ return null;
192
+ return _jsx(DeeplinkPage, { node: node, onBack: ctx.canGoBack ? ctx.onBack : null });
193
+ }
194
+ case "select-amount":
195
+ return renderSelectAmount(entry, ctx);
196
+ case "waiting-deposit":
197
+ return renderWaitingDeposit(entry, ctx);
198
+ case "waiting-tron":
199
+ return renderWaitingTron(entry, ctx);
200
+ case "exchange-page":
201
+ return renderExchangePage(entry, ctx);
202
+ case "wallet-connect":
203
+ return renderWalletConnect(ctx);
204
+ case "wallet-select-token":
205
+ return renderWalletSelectToken(ctx);
206
+ case "wallet-select-amount":
207
+ return renderWalletSelectAmount(entry, ctx);
208
+ case "wallet-sending":
209
+ return renderWalletSending(entry, ctx);
210
+ default:
211
+ return null;
212
+ }
213
+ }
214
+ function renderSelectAmount(entry, ctx) {
215
+ const node = findNode(entry.nodeId, ctx.session.navTree);
216
+ if (!node)
217
+ return null;
218
+ if (entry.flowType === "deposit") {
219
+ const depositNode = node;
220
+ return (_jsx(SelectAmountPage, { node: depositNode, minimumUsd: depositNode.minimumUsd, maximumUsd: depositNode.maximumUsd, tokenSuffix: depositNode.tokenSuffix, chainId: depositNode.chainId, onBack: ctx.canGoBack ? ctx.onBack : undefined, onContinue: ctx.onAmountContinue }));
221
+ }
222
+ if (entry.flowType === "tron") {
223
+ const tronNode = node;
224
+ return (_jsx(SelectAmountPage, { node: { icon: tronNode.icon, title: tronNode.title }, minimumUsd: tronNode.minimumUsd, maximumUsd: tronNode.maximumUsd, tokenSuffix: "USDT", chainId: tron.chainId, onBack: ctx.canGoBack ? ctx.onBack : undefined, onContinue: ctx.onAmountContinue }));
225
+ }
226
+ if (entry.flowType === "exchange") {
227
+ const exchangeNode = node;
228
+ return (_jsx(SelectAmountPage, { node: { icon: exchangeNode.icon, title: exchangeNode.title }, minimumUsd: exchangeNode.minimumUsd, maximumUsd: exchangeNode.maximumUsd, onBack: ctx.canGoBack ? ctx.onBack : undefined, onContinue: ctx.onAmountContinue }));
229
+ }
230
+ return null;
231
+ }
232
+ function renderWaitingDeposit(entry, ctx) {
233
+ const node = findNode(entry.nodeId, ctx.session.navTree);
234
+ if (!node)
235
+ return null;
236
+ const selectedToken = node.tokenSuffix === "USDC" || node.tokenSuffix === "USDT" ? node.tokenSuffix : undefined;
237
+ return _jsx(WaitingDepositAddressPage, { node: node, amountUsd: entry.amountUsd, selectedToken: selectedToken, sessionId: ctx.session.sessionId, onBack: ctx.onBack, onRefresh: ctx.onRefresh });
238
+ }
239
+ function renderWaitingTron(entry, ctx) {
240
+ const node = findNode(entry.nodeId, ctx.session.navTree);
241
+ if (!node)
242
+ return null;
243
+ if (entry.error)
244
+ return _jsx(FlowErrorMessage, { error: entry.error, onBack: ctx.onBack, onRetry: ctx.onRetry });
245
+ return (_jsx(WaitingDepositAddressPage, { node: { type: "DepositAddress", id: entry.nodeId, title: node.title, address: entry.address ?? "", chainId: tron.chainId, icon: node.icon, minimumUsd: node.minimumUsd, maximumUsd: node.maximumUsd, expiresAt: entry.expiresAt ?? 0, tokenSuffix: "USDT" }, amountUsd: entry.amountUsd, selectedToken: "USDT", loading: !entry.address, sessionId: ctx.session.sessionId, onBack: ctx.onBack, onRefresh: ctx.onRetry }));
246
+ }
247
+ function renderExchangePage(entry, ctx) {
248
+ const node = findNode(entry.nodeId, ctx.session.navTree);
249
+ if (!node)
250
+ return null;
251
+ if (entry.error)
252
+ return _jsx(FlowErrorMessage, { error: entry.error, onBack: ctx.onBack, onRetry: ctx.onRetry });
253
+ return _jsx(ExchangePage, { node: node, exchangeUrl: entry.exchangeUrl, waitingMessage: entry.waitingMessage, isLoading: !entry.exchangeUrl, onBack: ctx.onBack });
254
+ }
255
+ function renderWalletConnect(ctx) {
256
+ const { walletFlow } = ctx;
257
+ if (walletFlow.isConnecting)
258
+ return _jsx(LoadingMessage, {});
259
+ return (_jsxs("div", { className: "flex flex-col items-center justify-center flex-1 gap-6 p-6", children: [_jsx(PrimaryButton, { onClick: walletFlow.connect, children: t.connectWallet }), walletFlow.connectError && _jsx(SharedErrorMessage, { message: walletFlow.connectError }), _jsx(ContactSupportButton, { subject: "Wallet connection", info: { sessionId: ctx.session.sessionId, error: walletFlow.connectError ?? t.walletUnavailable } })] }));
260
+ }
261
+ function renderWalletSelectToken(ctx) {
262
+ return _jsx(SelectTokenPage, { options: ctx.walletFlow.balances, isLoading: ctx.walletFlow.isLoadingBalances, onSelect: ctx.onWalletSelectToken });
263
+ }
264
+ function renderWalletSelectAmount(entry, ctx) {
265
+ return _jsx(WalletAmountPage, { token: entry.token, onBack: ctx.onBack, onContinue: (amountUsd) => ctx.onWalletSending(entry.token, amountUsd) });
266
+ }
267
+ function renderWalletSending(entry, ctx) {
268
+ if (entry.error)
269
+ return _jsx(FlowErrorMessage, { error: entry.error, onBack: ctx.onBack, onRetry: ctx.onBack });
270
+ return (_jsx(ConfirmationPage, { sessionId: ctx.session.sessionId, sourceChainId: entry.token.balance.token.chainId, sourceTokenSymbol: entry.token.balance.token.symbol, sourceTokenLogoURI: entry.token.balance.token.logoURI, sourceAmountUsd: entry.amountUsd, pendingTxHash: entry.txHash, onBack: !entry.txHash ? ctx.onBack : undefined }));
271
+ }
272
+ function LoadingMessage() {
273
+ return (_jsx("div", { className: "flex items-center justify-center h-full text-[var(--daimo-text-muted)]", children: t.loading }));
274
+ }
275
+ function FlowErrorMessage({ error, onBack, onRetry }) {
276
+ return (_jsxs("div", { className: "flex flex-col items-center justify-center h-full gap-4 text-[var(--daimo-text-muted)]", children: [_jsx("p", { children: error }), _jsxs("div", { className: "flex gap-2", children: [_jsx("button", { className: "px-4 py-2 rounded-lg bg-[var(--daimo-surface)] hover:bg-[var(--daimo-surface-hover)] transition-colors", onClick: onBack, children: t.back }), _jsx("button", { className: "px-4 py-2 rounded-lg bg-[var(--daimo-primary)] text-white hover:opacity-90 transition-opacity", onClick: onRetry, children: t.tryAgain })] })] }));
277
+ }
278
+ function SkeletonContent({ rowCount = 4 }) {
279
+ const skeletonBg = "var(--daimo-skeleton, #e5e7eb)";
280
+ const radiusLg = "var(--daimo-radius-lg, 16px)";
281
+ return (_jsxs("div", { className: "flex flex-col", children: [_jsx("div", { className: "flex items-center justify-center p-6", children: _jsx("div", { className: "h-5 w-32 rounded animate-pulse", style: { backgroundColor: skeletonBg } }) }), _jsx("div", { className: "px-6 pb-4 flex flex-col gap-3", children: [...Array(rowCount)].map((_, i) => (_jsx("div", { className: "h-16 animate-pulse", style: { backgroundColor: skeletonBg, borderRadius: radiusLg, animationDelay: `${i * 100}ms` } }, i))) }), _jsx("div", { className: "py-4 text-center", children: _jsx("span", { className: "inline-block h-4 w-28 rounded animate-pulse", style: { backgroundColor: skeletonBg } }) })] }));
282
+ }
283
+ //# sourceMappingURL=DaimoModal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DaimoModal.js","sourceRoot":"","sources":["../../src/web/DaimoModal.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { NavNodeDeeplink } from "../common/legacy/session.js";
2
+ type DeeplinkPageProps = {
3
+ node: NavNodeDeeplink;
4
+ onBack: (() => void) | null;
5
+ };
6
+ export declare function DeeplinkPage({ node, onBack }: DeeplinkPageProps): import("react/jsx-runtime").JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=DeeplinkPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeeplinkPage.d.ts","sourceRoot":"","sources":["../../src/web/DeeplinkPage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAM9D,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,CAAC,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC;CAC7B,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,iBAAiB,2CAqB/D"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ExternalLinkIcon, PrimaryButton } from "./buttons.js";
3
+ import { t } from "../hooks/locale.js";
4
+ import { PageContent, PageHeader, PageLogo } from "./shared.js";
5
+ export function DeeplinkPage({ node, onBack }) {
6
+ const openDeeplink = () => {
7
+ if (node.url) {
8
+ window.open(node.url, "_blank");
9
+ }
10
+ };
11
+ return (_jsxs("div", { className: "flex flex-col flex-1 min-h-0", children: [_jsx(PageHeader, { title: node.title, onBack: onBack ?? undefined }), _jsxs(PageContent, { children: [node.icon && _jsx(PageLogo, { icon: node.icon, alt: node.title }), _jsxs("p", { className: "text-[var(--daimo-text-secondary)] text-center max-w-xs", children: [t.continueIn, " ", node.title, " ", t.toCompleteYourPayment] }), _jsxs(PrimaryButton, { onClick: openDeeplink, icon: _jsx(ExternalLinkIcon, {}), children: [t.openIn, " ", node.title] })] })] }));
12
+ }
13
+ //# sourceMappingURL=DeeplinkPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DeeplinkPage.js","sourceRoot":"","sources":["../../src/web/DeeplinkPage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAOhE,MAAM,UAAU,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAqB;IAC9D,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,IAAI,SAAS,GAAI,EAC9D,MAAC,WAAW,eACT,IAAI,CAAC,IAAI,IAAI,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,GAAI,EAC5D,aAAG,SAAS,EAAC,yDAAyD,aACnE,CAAC,CAAC,UAAU,OAAG,IAAI,CAAC,KAAK,OAAG,CAAC,CAAC,qBAAqB,IAClD,EACJ,MAAC,aAAa,IAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,KAAC,gBAAgB,KAAG,aAC7D,CAAC,CAAC,MAAM,OAAG,IAAI,CAAC,KAAK,IACR,IACJ,IACV,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { type NavNodeType } from "../hooks/navEvent.js";
2
+ type ErrorPageProps = {
3
+ message: unknown;
4
+ /** Button text, defaults to "Reload" */
5
+ retryText?: string;
6
+ /** Retry callback, defaults to window.location.reload() */
7
+ onRetry?: () => void;
8
+ /** Email subject for support button */
9
+ supportSubject?: string;
10
+ /** Additional info to include in support email */
11
+ supportInfo?: Record<string, string>;
12
+ /** Session ID for event logging (optional) */
13
+ sessionId?: string;
14
+ /** Current node context for event logging (optional) */
15
+ nodeId?: string | null;
16
+ nodeType?: NavNodeType | null;
17
+ /** Hide retry button */
18
+ hideRetry?: boolean;
19
+ /** Hide support button */
20
+ hideSupport?: boolean;
21
+ };
22
+ /**
23
+ * Standard error page with icon, message, retry button, and support link.
24
+ * Use for network errors, session creation failures, etc.
25
+ */
26
+ export declare function ErrorPage({ message, retryText, onRetry, supportSubject, supportInfo, sessionId, nodeId, nodeType, hideRetry, hideSupport, }: ErrorPageProps): import("react/jsx-runtime").JSX.Element;
27
+ export {};
28
+ //# sourceMappingURL=ErrorPage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorPage.d.ts","sourceRoot":"","sources":["../../src/web/ErrorPage.tsx"],"names":[],"mappings":"AAMA,OAAO,EAAmB,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAYzE,KAAK,cAAc,GAAG;IACpB,OAAO,EAAE,OAAO,CAAC;IACjB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,uCAAuC;IACvC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,8CAA8C;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9B,wBAAwB;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0BAA0B;IAC1B,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,CAAC;AAEF;;;GAGG;AACH,wBAAgB,SAAS,CAAC,EACxB,OAAO,EACP,SAAoB,EACpB,OAAO,EACP,cAAwB,EACxB,WAAgB,EAChB,SAAS,EACT,MAAa,EACb,QAAe,EACf,SAAiB,EACjB,WAAmB,GACpB,EAAE,cAAc,2CAsDhB"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useMemo } from "react";
3
+ import { SecondaryButton } from "./buttons.js";
4
+ import { ErrorIcon } from "./icons.js";
5
+ import { useDaimoClient } from "../hooks/DaimoClientContext.js";
6
+ import { t } from "../hooks/locale.js";
7
+ import { createNavLogger } from "../hooks/navEvent.js";
8
+ import { ContactSupportButton, ErrorMessage, PageHeader } from "./shared.js";
9
+ /** Extract a displayable string from any error value. */
10
+ function extractMessage(value) {
11
+ if (typeof value === "string")
12
+ return value;
13
+ if (value && typeof value === "object" && "message" in value) {
14
+ return String(value.message);
15
+ }
16
+ return t.unknownError;
17
+ }
18
+ /**
19
+ * Standard error page with icon, message, retry button, and support link.
20
+ * Use for network errors, session creation failures, etc.
21
+ */
22
+ export function ErrorPage({ message, retryText = t.reload, onRetry, supportSubject = t.error, supportInfo = {}, sessionId, nodeId = null, nodeType = null, hideRetry = false, hideSupport = false, }) {
23
+ const displayMessage = extractMessage(message);
24
+ const client = useDaimoClient();
25
+ const logNavEvent = useMemo(() => createNavLogger(client), [client]);
26
+ useEffect(() => {
27
+ console.error("[ErrorPage]", message);
28
+ if (sessionId == null)
29
+ return;
30
+ logNavEvent(sessionId, {
31
+ nodeId,
32
+ nodeType,
33
+ action: "error_shown",
34
+ error: displayMessage,
35
+ });
36
+ }, [message, sessionId, nodeId, nodeType, displayMessage, logNavEvent]);
37
+ const handleRetry = () => {
38
+ if (onRetry) {
39
+ onRetry();
40
+ }
41
+ else {
42
+ window.location.reload();
43
+ }
44
+ };
45
+ return (_jsxs("div", { className: "flex flex-col flex-1 min-h-0", children: [_jsx(PageHeader, { title: t.error }), _jsxs("div", { className: "flex-1 flex flex-col items-center justify-center p-6 gap-6", children: [_jsx("div", { className: "w-20 h-20 rounded-full flex items-center justify-center", style: { backgroundColor: "var(--daimo-error-light)" }, children: _jsx(ErrorIcon, {}) }), _jsx(ErrorMessage, { message: displayMessage }), !hideRetry && (_jsx(SecondaryButton, { onClick: handleRetry, children: retryText })), !hideSupport && (_jsx(ContactSupportButton, { subject: supportSubject, info: { error: displayMessage, ...supportInfo } }))] })] }));
46
+ }
47
+ //# sourceMappingURL=ErrorPage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorPage.js","sourceRoot":"","sources":["../../src/web/ErrorPage.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAE3C,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,eAAe,EAAoB,MAAM,sBAAsB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE7E,yDAAyD;AACzD,SAAS,cAAc,CAAC,KAAc;IACpC,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC5C,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,IAAI,KAAK,EAAE,CAAC;QAC7D,OAAO,MAAM,CAAE,KAA8B,CAAC,OAAO,CAAC,CAAC;IACzD,CAAC;IACD,OAAO,CAAC,CAAC,YAAY,CAAC;AACxB,CAAC;AAuBD;;;GAGG;AACH,MAAM,UAAU,SAAS,CAAC,EACxB,OAAO,EACP,SAAS,GAAG,CAAC,CAAC,MAAM,EACpB,OAAO,EACP,cAAc,GAAG,CAAC,CAAC,KAAK,EACxB,WAAW,GAAG,EAAE,EAChB,SAAS,EACT,MAAM,GAAG,IAAI,EACb,QAAQ,GAAG,IAAI,EACf,SAAS,GAAG,KAAK,EACjB,WAAW,GAAG,KAAK,GACJ;IACf,MAAM,cAAc,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;IAChC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;IAErE,SAAS,CAAC,GAAG,EAAE;QACb,OAAO,CAAC,KAAK,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACtC,IAAI,SAAS,IAAI,IAAI;YAAE,OAAO;QAC9B,WAAW,CAAC,SAAS,EAAE;YACrB,MAAM;YACN,QAAQ;YACR,MAAM,EAAE,aAAa;YACrB,KAAK,EAAE,cAAc;SACtB,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;IAExE,MAAM,WAAW,GAAG,GAAG,EAAE;QACvB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,EAAE,CAAC;QACZ,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC3B,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,UAAU,IAAC,KAAK,EAAE,CAAC,CAAC,KAAK,GAAI,EAC9B,eAAK,SAAS,EAAC,4DAA4D,aAEzE,cACE,SAAS,EAAC,yDAAyD,EACnE,KAAK,EAAE,EAAE,eAAe,EAAE,0BAA0B,EAAE,YAEtD,KAAC,SAAS,KAAG,GACT,EAGN,KAAC,YAAY,IAAC,OAAO,EAAE,cAAc,GAAI,EAGxC,CAAC,SAAS,IAAI,CACb,KAAC,eAAe,IAAC,OAAO,EAAE,WAAW,YAAG,SAAS,GAAmB,CACrE,EAGA,CAAC,WAAW,IAAI,CACf,KAAC,oBAAoB,IACnB,OAAO,EAAE,cAAc,EACvB,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,WAAW,EAAE,GAC/C,CACH,IACG,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { NavNodeExchange } from "../common/legacy/session.js";
2
+ type ExchangePageProps = {
3
+ node: NavNodeExchange;
4
+ exchangeUrl?: string;
5
+ waitingMessage?: string;
6
+ isLoading?: boolean;
7
+ onBack: () => void;
8
+ };
9
+ export declare function ExchangePage({ node, exchangeUrl, waitingMessage, isLoading, onBack, }: ExchangePageProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
11
+ //# sourceMappingURL=ExchangePage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExchangePage.d.ts","sourceRoot":"","sources":["../../src/web/ExchangePage.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAM9D,KAAK,iBAAiB,GAAG;IACvB,IAAI,EAAE,eAAe,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AAEF,wBAAgB,YAAY,CAAC,EAC3B,IAAI,EACJ,WAAW,EACX,cAAc,EACd,SAAS,EACT,MAAM,GACP,EAAE,iBAAiB,2CA+BnB"}
@@ -0,0 +1,13 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ExternalLinkIcon, PrimaryButton } from "./buttons.js";
3
+ import { t } from "../hooks/locale.js";
4
+ import { PageContent, PageHeader, PageLogo } from "./shared.js";
5
+ export function ExchangePage({ node, exchangeUrl, waitingMessage, isLoading, onBack, }) {
6
+ const openExchange = () => {
7
+ if (exchangeUrl)
8
+ window.open(exchangeUrl, "_blank");
9
+ };
10
+ return (_jsxs("div", { className: "flex flex-col flex-1 min-h-0", children: [_jsx(PageHeader, { title: node.title, onBack: onBack }), _jsxs(PageContent, { children: [node.icon && _jsx(PageLogo, { icon: node.icon, alt: node.title }), isLoading ? (_jsxs("div", { className: "flex flex-col items-center gap-2 max-w-xs w-full", children: [_jsx("div", { className: "h-4 w-4/5 rounded bg-[var(--daimo-surface-secondary)] animate-pulse" }), _jsx("div", { className: "h-4 w-3/5 rounded bg-[var(--daimo-surface-secondary)] animate-pulse" })] })) : (_jsx("p", { className: "text-[var(--daimo-text-secondary)] text-center max-w-xs", children: waitingMessage ||
11
+ `${t.continueTo} ${node.title} ${t.toCompleteYourDeposit}` })), _jsxs(PrimaryButton, { onClick: openExchange, icon: _jsx(ExternalLinkIcon, {}), disabled: isLoading, children: [t.open, " ", node.title] })] })] }));
12
+ }
13
+ //# sourceMappingURL=ExchangePage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ExchangePage.js","sourceRoot":"","sources":["../../src/web/ExchangePage.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,CAAC,EAAE,MAAM,oBAAoB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAUhE,MAAM,UAAU,YAAY,CAAC,EAC3B,IAAI,EACJ,WAAW,EACX,cAAc,EACd,SAAS,EACT,MAAM,GACY;IAClB,MAAM,YAAY,GAAG,GAAG,EAAE;QACxB,IAAI,WAAW;YAAE,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACtD,CAAC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,8BAA8B,aAC3C,KAAC,UAAU,IAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,GAAI,EACjD,MAAC,WAAW,eACT,IAAI,CAAC,IAAI,IAAI,KAAC,QAAQ,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,GAAI,EAC3D,SAAS,CAAC,CAAC,CAAC,CACX,eAAK,SAAS,EAAC,kDAAkD,aAC/D,cAAK,SAAS,EAAC,qEAAqE,GAAG,EACvF,cAAK,SAAS,EAAC,qEAAqE,GAAG,IACnF,CACP,CAAC,CAAC,CAAC,CACF,YAAG,SAAS,EAAC,yDAAyD,YACnE,cAAc;4BACb,GAAG,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,qBAAqB,EAAE,GAC1D,CACL,EACD,MAAC,aAAa,IACZ,OAAO,EAAE,YAAY,EACrB,IAAI,EAAE,KAAC,gBAAgB,KAAG,EAC1B,QAAQ,EAAE,SAAS,aAElB,CAAC,CAAC,IAAI,OAAG,IAAI,CAAC,KAAK,IACN,IACJ,IACV,CACP,CAAC;AACJ,CAAC"}