@medialane/ui 0.185.0 → 0.186.0

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 (187) hide show
  1. package/dist/components/media-wallet/action-button.cjs +54 -0
  2. package/dist/components/media-wallet/action-button.cjs.map +1 -0
  3. package/dist/components/media-wallet/action-button.d.cts +10 -0
  4. package/dist/components/media-wallet/action-button.d.ts +10 -0
  5. package/dist/components/media-wallet/action-button.js +28 -0
  6. package/dist/components/media-wallet/action-button.js.map +1 -0
  7. package/dist/components/media-wallet/action-modal.cjs +84 -0
  8. package/dist/components/media-wallet/action-modal.cjs.map +1 -0
  9. package/dist/components/media-wallet/action-modal.d.cts +20 -0
  10. package/dist/components/media-wallet/action-modal.d.ts +20 -0
  11. package/dist/components/media-wallet/action-modal.js +56 -0
  12. package/dist/components/media-wallet/action-modal.js.map +1 -0
  13. package/dist/components/media-wallet/activate-card.cjs +72 -0
  14. package/dist/components/media-wallet/activate-card.cjs.map +1 -0
  15. package/dist/components/media-wallet/activate-card.d.cts +7 -0
  16. package/dist/components/media-wallet/activate-card.d.ts +7 -0
  17. package/dist/components/media-wallet/activate-card.js +48 -0
  18. package/dist/components/media-wallet/activate-card.js.map +1 -0
  19. package/dist/components/media-wallet/address-qr.cjs +64 -0
  20. package/dist/components/media-wallet/address-qr.cjs.map +1 -0
  21. package/dist/components/media-wallet/address-qr.d.cts +8 -0
  22. package/dist/components/media-wallet/address-qr.d.ts +8 -0
  23. package/dist/components/media-wallet/address-qr.js +30 -0
  24. package/dist/components/media-wallet/address-qr.js.map +1 -0
  25. package/dist/components/media-wallet/back-button.cjs +41 -0
  26. package/dist/components/media-wallet/back-button.cjs.map +1 -0
  27. package/dist/components/media-wallet/back-button.d.cts +7 -0
  28. package/dist/components/media-wallet/back-button.d.ts +7 -0
  29. package/dist/components/media-wallet/back-button.js +17 -0
  30. package/dist/components/media-wallet/back-button.js.map +1 -0
  31. package/dist/components/media-wallet/copy-icon.cjs +49 -0
  32. package/dist/components/media-wallet/copy-icon.cjs.map +1 -0
  33. package/dist/components/media-wallet/copy-icon.d.cts +7 -0
  34. package/dist/components/media-wallet/copy-icon.d.ts +7 -0
  35. package/dist/components/media-wallet/copy-icon.js +25 -0
  36. package/dist/components/media-wallet/copy-icon.js.map +1 -0
  37. package/dist/components/media-wallet/currency-sheet.cjs +54 -0
  38. package/dist/components/media-wallet/currency-sheet.cjs.map +1 -0
  39. package/dist/components/media-wallet/currency-sheet.d.cts +12 -0
  40. package/dist/components/media-wallet/currency-sheet.d.ts +12 -0
  41. package/dist/components/media-wallet/currency-sheet.js +30 -0
  42. package/dist/components/media-wallet/currency-sheet.js.map +1 -0
  43. package/dist/components/media-wallet/media-wallet-activity.cjs +223 -0
  44. package/dist/components/media-wallet/media-wallet-activity.cjs.map +1 -0
  45. package/dist/components/media-wallet/media-wallet-activity.d.cts +12 -0
  46. package/dist/components/media-wallet/media-wallet-activity.d.ts +12 -0
  47. package/dist/components/media-wallet/media-wallet-activity.js +189 -0
  48. package/dist/components/media-wallet/media-wallet-activity.js.map +1 -0
  49. package/dist/components/media-wallet/media-wallet-header.cjs +97 -0
  50. package/dist/components/media-wallet/media-wallet-header.cjs.map +1 -0
  51. package/dist/components/media-wallet/media-wallet-header.d.cts +8 -0
  52. package/dist/components/media-wallet/media-wallet-header.d.ts +8 -0
  53. package/dist/components/media-wallet/media-wallet-header.js +63 -0
  54. package/dist/components/media-wallet/media-wallet-header.js.map +1 -0
  55. package/dist/components/media-wallet/media-wallet-home.cjs +258 -0
  56. package/dist/components/media-wallet/media-wallet-home.cjs.map +1 -0
  57. package/dist/components/media-wallet/media-wallet-home.d.cts +14 -0
  58. package/dist/components/media-wallet/media-wallet-home.d.ts +14 -0
  59. package/dist/components/media-wallet/media-wallet-home.js +224 -0
  60. package/dist/components/media-wallet/media-wallet-home.js.map +1 -0
  61. package/dist/components/media-wallet/media-wallet-overlay.cjs +137 -0
  62. package/dist/components/media-wallet/media-wallet-overlay.cjs.map +1 -0
  63. package/dist/components/media-wallet/media-wallet-overlay.d.cts +14 -0
  64. package/dist/components/media-wallet/media-wallet-overlay.d.ts +14 -0
  65. package/dist/components/media-wallet/media-wallet-overlay.js +102 -0
  66. package/dist/components/media-wallet/media-wallet-overlay.js.map +1 -0
  67. package/dist/components/media-wallet/media-wallet-send.cjs +313 -0
  68. package/dist/components/media-wallet/media-wallet-send.cjs.map +1 -0
  69. package/dist/components/media-wallet/media-wallet-send.d.cts +14 -0
  70. package/dist/components/media-wallet/media-wallet-send.d.ts +14 -0
  71. package/dist/components/media-wallet/media-wallet-send.js +289 -0
  72. package/dist/components/media-wallet/media-wallet-send.js.map +1 -0
  73. package/dist/components/media-wallet/media-wallet-token-detail.cjs +164 -0
  74. package/dist/components/media-wallet/media-wallet-token-detail.cjs.map +1 -0
  75. package/dist/components/media-wallet/media-wallet-token-detail.d.cts +13 -0
  76. package/dist/components/media-wallet/media-wallet-token-detail.d.ts +13 -0
  77. package/dist/components/media-wallet/media-wallet-token-detail.js +140 -0
  78. package/dist/components/media-wallet/media-wallet-token-detail.js.map +1 -0
  79. package/dist/components/media-wallet/media-wallet.cjs +51 -0
  80. package/dist/components/media-wallet/media-wallet.cjs.map +1 -0
  81. package/dist/components/media-wallet/media-wallet.d.cts +13 -0
  82. package/dist/components/media-wallet/media-wallet.d.ts +13 -0
  83. package/dist/components/media-wallet/media-wallet.js +27 -0
  84. package/dist/components/media-wallet/media-wallet.js.map +1 -0
  85. package/dist/components/media-wallet/nft-strip.cjs +85 -0
  86. package/dist/components/media-wallet/nft-strip.cjs.map +1 -0
  87. package/dist/components/media-wallet/nft-strip.d.cts +12 -0
  88. package/dist/components/media-wallet/nft-strip.d.ts +12 -0
  89. package/dist/components/media-wallet/nft-strip.js +51 -0
  90. package/dist/components/media-wallet/nft-strip.js.map +1 -0
  91. package/dist/components/media-wallet/quick-action.cjs +59 -0
  92. package/dist/components/media-wallet/quick-action.cjs.map +1 -0
  93. package/dist/components/media-wallet/quick-action.d.cts +12 -0
  94. package/dist/components/media-wallet/quick-action.d.ts +12 -0
  95. package/dist/components/media-wallet/quick-action.js +35 -0
  96. package/dist/components/media-wallet/quick-action.js.map +1 -0
  97. package/dist/components/media-wallet/receive-card.cjs +86 -0
  98. package/dist/components/media-wallet/receive-card.cjs.map +1 -0
  99. package/dist/components/media-wallet/receive-card.d.cts +7 -0
  100. package/dist/components/media-wallet/receive-card.d.ts +7 -0
  101. package/dist/components/media-wallet/receive-card.js +52 -0
  102. package/dist/components/media-wallet/receive-card.js.map +1 -0
  103. package/dist/components/media-wallet/section-header.cjs +32 -0
  104. package/dist/components/media-wallet/section-header.cjs.map +1 -0
  105. package/dist/components/media-wallet/section-header.d.cts +7 -0
  106. package/dist/components/media-wallet/section-header.d.ts +7 -0
  107. package/dist/components/media-wallet/section-header.js +8 -0
  108. package/dist/components/media-wallet/section-header.js.map +1 -0
  109. package/dist/components/media-wallet/success-dialog.cjs +75 -0
  110. package/dist/components/media-wallet/success-dialog.cjs.map +1 -0
  111. package/dist/components/media-wallet/success-dialog.d.cts +11 -0
  112. package/dist/components/media-wallet/success-dialog.d.ts +11 -0
  113. package/dist/components/media-wallet/success-dialog.js +51 -0
  114. package/dist/components/media-wallet/success-dialog.js.map +1 -0
  115. package/dist/components/media-wallet/types.cjs +37 -0
  116. package/dist/components/media-wallet/types.cjs.map +1 -0
  117. package/dist/components/media-wallet/types.d.cts +66 -0
  118. package/dist/components/media-wallet/types.d.ts +66 -0
  119. package/dist/components/media-wallet/types.js +12 -0
  120. package/dist/components/media-wallet/types.js.map +1 -0
  121. package/dist/components/media-wallet/wallet-activity-icon.cjs +69 -0
  122. package/dist/components/media-wallet/wallet-activity-icon.cjs.map +1 -0
  123. package/dist/components/media-wallet/wallet-activity-icon.d.cts +8 -0
  124. package/dist/components/media-wallet/wallet-activity-icon.d.ts +8 -0
  125. package/dist/components/media-wallet/wallet-activity-icon.js +45 -0
  126. package/dist/components/media-wallet/wallet-activity-icon.js.map +1 -0
  127. package/dist/index.cjs +5 -0
  128. package/dist/index.cjs.map +1 -1
  129. package/dist/index.d.cts +3 -0
  130. package/dist/index.d.ts +3 -0
  131. package/dist/index.js +3 -0
  132. package/dist/index.js.map +1 -1
  133. package/dist/utils/media-wallet/activity-feed.cjs +35 -0
  134. package/dist/utils/media-wallet/activity-feed.cjs.map +1 -0
  135. package/dist/utils/media-wallet/activity-feed.d.cts +14 -0
  136. package/dist/utils/media-wallet/activity-feed.d.ts +14 -0
  137. package/dist/utils/media-wallet/activity-feed.js +11 -0
  138. package/dist/utils/media-wallet/activity-feed.js.map +1 -0
  139. package/dist/utils/media-wallet/confetti.cjs +51 -0
  140. package/dist/utils/media-wallet/confetti.cjs.map +1 -0
  141. package/dist/utils/media-wallet/confetti.d.cts +3 -0
  142. package/dist/utils/media-wallet/confetti.d.ts +3 -0
  143. package/dist/utils/media-wallet/confetti.js +17 -0
  144. package/dist/utils/media-wallet/confetti.js.map +1 -0
  145. package/dist/utils/media-wallet/nft-items.cjs +38 -0
  146. package/dist/utils/media-wallet/nft-items.cjs.map +1 -0
  147. package/dist/utils/media-wallet/nft-items.d.cts +13 -0
  148. package/dist/utils/media-wallet/nft-items.d.ts +13 -0
  149. package/dist/utils/media-wallet/nft-items.js +14 -0
  150. package/dist/utils/media-wallet/nft-items.js.map +1 -0
  151. package/dist/utils/media-wallet/run-intent-calls.cjs +32 -0
  152. package/dist/utils/media-wallet/run-intent-calls.cjs.map +1 -0
  153. package/dist/utils/media-wallet/run-intent-calls.d.cts +16 -0
  154. package/dist/utils/media-wallet/run-intent-calls.d.ts +16 -0
  155. package/dist/utils/media-wallet/run-intent-calls.js +8 -0
  156. package/dist/utils/media-wallet/run-intent-calls.js.map +1 -0
  157. package/dist/utils/media-wallet/use-erc20-balance.cjs +75 -0
  158. package/dist/utils/media-wallet/use-erc20-balance.cjs.map +1 -0
  159. package/dist/utils/media-wallet/use-erc20-balance.d.cts +15 -0
  160. package/dist/utils/media-wallet/use-erc20-balance.d.ts +15 -0
  161. package/dist/utils/media-wallet/use-erc20-balance.js +40 -0
  162. package/dist/utils/media-wallet/use-erc20-balance.js.map +1 -0
  163. package/dist/utils/media-wallet/use-tokens-by-owner.cjs +52 -0
  164. package/dist/utils/media-wallet/use-tokens-by-owner.cjs.map +1 -0
  165. package/dist/utils/media-wallet/use-tokens-by-owner.d.cts +10 -0
  166. package/dist/utils/media-wallet/use-tokens-by-owner.d.ts +10 -0
  167. package/dist/utils/media-wallet/use-tokens-by-owner.js +18 -0
  168. package/dist/utils/media-wallet/use-tokens-by-owner.js.map +1 -0
  169. package/dist/utils/media-wallet/wallet-activity.cjs +83 -0
  170. package/dist/utils/media-wallet/wallet-activity.cjs.map +1 -0
  171. package/dist/utils/media-wallet/wallet-activity.d.cts +7 -0
  172. package/dist/utils/media-wallet/wallet-activity.d.ts +7 -0
  173. package/dist/utils/media-wallet/wallet-activity.js +57 -0
  174. package/dist/utils/media-wallet/wallet-activity.js.map +1 -0
  175. package/dist/utils/media-wallet/wallet-format.cjs +59 -0
  176. package/dist/utils/media-wallet/wallet-format.cjs.map +1 -0
  177. package/dist/utils/media-wallet/wallet-format.d.cts +9 -0
  178. package/dist/utils/media-wallet/wallet-format.d.ts +9 -0
  179. package/dist/utils/media-wallet/wallet-format.js +29 -0
  180. package/dist/utils/media-wallet/wallet-format.js.map +1 -0
  181. package/dist/utils/media-wallet/wallet-tokens.cjs +39 -0
  182. package/dist/utils/media-wallet/wallet-tokens.cjs.map +1 -0
  183. package/dist/utils/media-wallet/wallet-tokens.d.cts +10 -0
  184. package/dist/utils/media-wallet/wallet-tokens.d.ts +10 -0
  185. package/dist/utils/media-wallet/wallet-tokens.js +15 -0
  186. package/dist/utils/media-wallet/wallet-tokens.js.map +1 -0
  187. package/package.json +9 -1
@@ -0,0 +1,137 @@
1
+ "use strict";
2
+ "use client";
3
+ var __create = Object.create;
4
+ var __defProp = Object.defineProperty;
5
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
6
+ var __getOwnPropNames = Object.getOwnPropertyNames;
7
+ var __getProtoOf = Object.getPrototypeOf;
8
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
9
+ var __export = (target, all) => {
10
+ for (var name in all)
11
+ __defProp(target, name, { get: all[name], enumerable: true });
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") {
15
+ for (let key of __getOwnPropNames(from))
16
+ if (!__hasOwnProp.call(to, key) && key !== except)
17
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
18
+ }
19
+ return to;
20
+ };
21
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
22
+ // If the importer is in node compatibility mode or this is not an ESM
23
+ // file that has been converted to a CommonJS file using a Babel-
24
+ // compatible transform (i.e. "__esModule" has not been set), then set
25
+ // "default" to the CommonJS "module.exports" for node compatibility.
26
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
27
+ mod
28
+ ));
29
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
30
+ var media_wallet_overlay_exports = {};
31
+ __export(media_wallet_overlay_exports, {
32
+ MediaWalletOverlay: () => MediaWalletOverlay,
33
+ useMediaWallet: () => useMediaWallet
34
+ });
35
+ module.exports = __toCommonJS(media_wallet_overlay_exports);
36
+ var import_jsx_runtime = require("react/jsx-runtime");
37
+ var React = __toESM(require("react"), 1);
38
+ var import_link = __toESM(require("../link.js"), 1);
39
+ var import_framer_motion = require("framer-motion");
40
+ var import_lucide_react = require("lucide-react");
41
+ var import_currency_icon = require("../currency-icon.js");
42
+ var import_media_wallet = require("./media-wallet.js");
43
+ var import_action_modal = require("./action-modal.js");
44
+ var import_types = require("./types.js");
45
+ const WL_OPEN = "ml:media-wallet-open";
46
+ const WL_CLOSE = "ml:media-wallet-close";
47
+ function useMediaWallet() {
48
+ return {
49
+ open: (view) => document.dispatchEvent(new CustomEvent(WL_OPEN, { detail: view })),
50
+ close: () => document.dispatchEvent(new CustomEvent(WL_CLOSE))
51
+ };
52
+ }
53
+ function MediaWalletOverlay(app) {
54
+ const [open, setOpen] = React.useState(false);
55
+ const [initialView, setInitialView] = React.useState(void 0);
56
+ React.useEffect(() => {
57
+ const onOpen = (e) => {
58
+ setInitialView(e.detail);
59
+ setOpen(true);
60
+ };
61
+ const onClose = () => setOpen(false);
62
+ const onKey = (e) => {
63
+ if (e.key === "Escape") setOpen(false);
64
+ };
65
+ document.addEventListener(WL_OPEN, onOpen);
66
+ document.addEventListener(WL_CLOSE, onClose);
67
+ document.addEventListener("keydown", onKey);
68
+ return () => {
69
+ document.removeEventListener(WL_OPEN, onOpen);
70
+ document.removeEventListener(WL_CLOSE, onClose);
71
+ document.removeEventListener("keydown", onKey);
72
+ };
73
+ }, []);
74
+ const close = () => setOpen(false);
75
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_types.MediaWalletAppContext.Provider, { value: app, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_framer_motion.AnimatePresence, { children: open && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
76
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
77
+ import_framer_motion.motion.div,
78
+ {
79
+ className: "nav-canvas-overlay",
80
+ initial: { opacity: 0 },
81
+ animate: { opacity: 1 },
82
+ exit: { opacity: 0 },
83
+ transition: { duration: 0.15 },
84
+ onClick: close
85
+ }
86
+ ),
87
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
88
+ import_framer_motion.motion.div,
89
+ {
90
+ className: "fixed inset-0 z-[101] flex items-end justify-center p-3 pb-4 sm:items-center sm:p-4",
91
+ initial: { opacity: 0, y: 24, scale: 1 },
92
+ animate: { opacity: 1, y: 0, scale: 1 },
93
+ exit: { opacity: 0, y: 24 },
94
+ transition: { duration: 0.18, ease: "easeOut" },
95
+ onClick: close,
96
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
97
+ "div",
98
+ {
99
+ id: import_action_modal.MEDIA_WALLET_PORTAL_ID,
100
+ className: "relative flex w-full max-w-[390px] flex-col overflow-hidden rounded-[32px] aspect-[9/19.5] max-h-[85dvh] bg-background",
101
+ onClick: (e) => e.stopPropagation(),
102
+ children: [
103
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "absolute right-3 top-3 z-20 flex items-center gap-2", children: [
104
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
105
+ import_link.default,
106
+ {
107
+ href: "/settings",
108
+ onClick: close,
109
+ "aria-label": "Settings",
110
+ className: "grid h-8 w-8 place-items-center rounded-full bg-foreground/[0.06] text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground",
111
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_currency_icon.CurrencyIcon, { symbol: "STRK", size: 16 })
112
+ }
113
+ ),
114
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
115
+ "button",
116
+ {
117
+ onClick: close,
118
+ "aria-label": "Close wallet",
119
+ className: "grid h-8 w-8 place-items-center rounded-full bg-foreground/[0.06] text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground",
120
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_lucide_react.X, { className: "h-4 w-4" })
121
+ }
122
+ )
123
+ ] }),
124
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "min-h-0 flex-1 overflow-y-auto overscroll-contain", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_media_wallet.MediaWallet, { onClose: close, initialView }) })
125
+ ]
126
+ }
127
+ )
128
+ }
129
+ )
130
+ ] }) }) });
131
+ }
132
+ // Annotate the CommonJS export names for ESM import in node:
133
+ 0 && (module.exports = {
134
+ MediaWalletOverlay,
135
+ useMediaWallet
136
+ });
137
+ //# sourceMappingURL=media-wallet-overlay.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/media-wallet/media-wallet-overlay.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport Link from \"../link.js\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { X } from \"lucide-react\";\nimport { CurrencyIcon } from \"../currency-icon.js\";\nimport { MediaWallet } from \"./media-wallet.js\";\nimport { MEDIA_WALLET_PORTAL_ID } from \"./action-modal.js\";\nimport { MediaWalletAppContext, type MediaWalletAppProps, type MediaWalletView } from \"./types.js\";\n\nconst WL_OPEN = \"ml:media-wallet-open\";\nconst WL_CLOSE = \"ml:media-wallet-close\";\n\nexport function useMediaWallet() {\n return {\n open: (view?: MediaWalletView) =>\n document.dispatchEvent(new CustomEvent<MediaWalletView | undefined>(WL_OPEN, { detail: view })),\n close: () => document.dispatchEvent(new CustomEvent(WL_CLOSE)),\n };\n}\n\nexport function MediaWalletOverlay(app: MediaWalletAppProps) {\n const [open, setOpen] = React.useState(false);\n const [initialView, setInitialView] = React.useState<MediaWalletView | undefined>(undefined);\n\n React.useEffect(() => {\n const onOpen = (e: Event) => {\n setInitialView((e as CustomEvent<MediaWalletView | undefined>).detail);\n setOpen(true);\n };\n const onClose = () => setOpen(false);\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(WL_OPEN, onOpen);\n document.addEventListener(WL_CLOSE, onClose);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(WL_OPEN, onOpen);\n document.removeEventListener(WL_CLOSE, onClose);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, []);\n\n const close = () => setOpen(false);\n\n return (\n <MediaWalletAppContext.Provider value={app}>\n <AnimatePresence>\n {open && (\n <>\n <motion.div\n className=\"nav-canvas-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n onClick={close}\n />\n <motion.div\n className=\"fixed inset-0 z-[101] flex items-end justify-center p-3 pb-4 sm:items-center sm:p-4\"\n initial={{ opacity: 0, y: 24, scale: 1 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 24 }}\n transition={{ duration: 0.18, ease: \"easeOut\" }}\n onClick={close}\n >\n <div\n id={MEDIA_WALLET_PORTAL_ID}\n className={\n \"relative flex w-full max-w-[390px] flex-col overflow-hidden rounded-[32px] \" +\n \"aspect-[9/19.5] max-h-[85dvh] \" +\n \"bg-background\"\n }\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"absolute right-3 top-3 z-20 flex items-center gap-2\">\n <Link\n href=\"/settings\"\n onClick={close}\n aria-label=\"Settings\"\n className=\"grid h-8 w-8 place-items-center rounded-full bg-foreground/[0.06] text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground\"\n >\n <CurrencyIcon symbol=\"STRK\" size={16} />\n </Link>\n <button\n onClick={close}\n aria-label=\"Close wallet\"\n className=\"grid h-8 w-8 place-items-center rounded-full bg-foreground/[0.06] text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain\">\n <MediaWallet onClose={close} initialView={initialView} />\n </div>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n </MediaWalletAppContext.Provider>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAmDQ;AAjDR,YAAuB;AACvB,kBAAiB;AACjB,2BAAwC;AACxC,0BAAkB;AAClB,2BAA6B;AAC7B,0BAA4B;AAC5B,0BAAuC;AACvC,mBAAsF;AAEtF,MAAM,UAAU;AAChB,MAAM,WAAW;AAEV,SAAS,iBAAiB;AAC/B,SAAO;AAAA,IACL,MAAM,CAAC,SACL,SAAS,cAAc,IAAI,YAAyC,SAAS,EAAE,QAAQ,KAAK,CAAC,CAAC;AAAA,IAChG,OAAO,MAAM,SAAS,cAAc,IAAI,YAAY,QAAQ,CAAC;AAAA,EAC/D;AACF;AAEO,SAAS,mBAAmB,KAA0B;AAC3D,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAsC,MAAS;AAE3F,QAAM,UAAU,MAAM;AACpB,UAAM,SAAS,CAAC,MAAa;AAC3B,qBAAgB,EAA+C,MAAM;AACrE,cAAQ,IAAI;AAAA,IACd;AACA,UAAM,UAAU,MAAM,QAAQ,KAAK;AACnC,UAAM,QAAQ,CAAC,MAAqB;AAClC,UAAI,EAAE,QAAQ,SAAU,SAAQ,KAAK;AAAA,IACvC;AACA,aAAS,iBAAiB,SAAS,MAAM;AACzC,aAAS,iBAAiB,UAAU,OAAO;AAC3C,aAAS,iBAAiB,WAAW,KAAK;AAC1C,WAAO,MAAM;AACX,eAAS,oBAAoB,SAAS,MAAM;AAC5C,eAAS,oBAAoB,UAAU,OAAO;AAC9C,eAAS,oBAAoB,WAAW,KAAK;AAAA,IAC/C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQ,MAAM,QAAQ,KAAK;AAEjC,SACE,4CAAC,mCAAsB,UAAtB,EAA+B,OAAO,KACvC,sDAAC,wCACE,kBACC,4EACE;AAAA;AAAA,MAAC,4BAAO;AAAA,MAAP;AAAA,QACC,WAAU;AAAA,QACV,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,MAAM,EAAE,SAAS,EAAE;AAAA,QACnB,YAAY,EAAE,UAAU,KAAK;AAAA,QAC7B,SAAS;AAAA;AAAA,IACX;AAAA,IACA;AAAA,MAAC,4BAAO;AAAA,MAAP;AAAA,QACC,WAAU;AAAA,QACV,SAAS,EAAE,SAAS,GAAG,GAAG,IAAI,OAAO,EAAE;AAAA,QACvC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,OAAO,EAAE;AAAA,QACtC,MAAM,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,QAC1B,YAAY,EAAE,UAAU,MAAM,MAAM,UAAU;AAAA,QAC9C,SAAS;AAAA,QAET;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,WACE;AAAA,YAIF,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,YAElC;AAAA,2DAAC,SAAI,WAAU,uDACb;AAAA;AAAA,kBAAC,YAAAA;AAAA,kBAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS;AAAA,oBACT,cAAW;AAAA,oBACX,WAAU;AAAA,oBAEV,sDAAC,qCAAa,QAAO,QAAO,MAAM,IAAI;AAAA;AAAA,gBACxC;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS;AAAA,oBACT,cAAW;AAAA,oBACX,WAAU;AAAA,oBAEV,sDAAC,yBAAE,WAAU,WAAU;AAAA;AAAA,gBACzB;AAAA,iBACF;AAAA,cACA,4CAAC,SAAI,WAAU,qDACb,sDAAC,mCAAY,SAAS,OAAO,aAA0B,GACzD;AAAA;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,KACF,GAEJ,GACA;AAEJ;","names":["Link"]}
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { MediaWalletAppProps, MediaWalletView } from './types.cjs';
3
+ import 'react';
4
+ import 'starknet';
5
+ import '@medialane/sdk/starknet';
6
+ import '../../utils/media-wallet/wallet-tokens.cjs';
7
+
8
+ declare function useMediaWallet(): {
9
+ open: (view?: MediaWalletView) => boolean;
10
+ close: () => boolean;
11
+ };
12
+ declare function MediaWalletOverlay(app: MediaWalletAppProps): react_jsx_runtime.JSX.Element;
13
+
14
+ export { MediaWalletOverlay, useMediaWallet };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { MediaWalletAppProps, MediaWalletView } from './types.js';
3
+ import 'react';
4
+ import 'starknet';
5
+ import '@medialane/sdk/starknet';
6
+ import '../../utils/media-wallet/wallet-tokens.js';
7
+
8
+ declare function useMediaWallet(): {
9
+ open: (view?: MediaWalletView) => boolean;
10
+ close: () => boolean;
11
+ };
12
+ declare function MediaWalletOverlay(app: MediaWalletAppProps): react_jsx_runtime.JSX.Element;
13
+
14
+ export { MediaWalletOverlay, useMediaWallet };
@@ -0,0 +1,102 @@
1
+ "use client";
2
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import Link from "../link.js";
5
+ import { AnimatePresence, motion } from "framer-motion";
6
+ import { X } from "lucide-react";
7
+ import { CurrencyIcon } from "../currency-icon.js";
8
+ import { MediaWallet } from "./media-wallet.js";
9
+ import { MEDIA_WALLET_PORTAL_ID } from "./action-modal.js";
10
+ import { MediaWalletAppContext } from "./types.js";
11
+ const WL_OPEN = "ml:media-wallet-open";
12
+ const WL_CLOSE = "ml:media-wallet-close";
13
+ function useMediaWallet() {
14
+ return {
15
+ open: (view) => document.dispatchEvent(new CustomEvent(WL_OPEN, { detail: view })),
16
+ close: () => document.dispatchEvent(new CustomEvent(WL_CLOSE))
17
+ };
18
+ }
19
+ function MediaWalletOverlay(app) {
20
+ const [open, setOpen] = React.useState(false);
21
+ const [initialView, setInitialView] = React.useState(void 0);
22
+ React.useEffect(() => {
23
+ const onOpen = (e) => {
24
+ setInitialView(e.detail);
25
+ setOpen(true);
26
+ };
27
+ const onClose = () => setOpen(false);
28
+ const onKey = (e) => {
29
+ if (e.key === "Escape") setOpen(false);
30
+ };
31
+ document.addEventListener(WL_OPEN, onOpen);
32
+ document.addEventListener(WL_CLOSE, onClose);
33
+ document.addEventListener("keydown", onKey);
34
+ return () => {
35
+ document.removeEventListener(WL_OPEN, onOpen);
36
+ document.removeEventListener(WL_CLOSE, onClose);
37
+ document.removeEventListener("keydown", onKey);
38
+ };
39
+ }, []);
40
+ const close = () => setOpen(false);
41
+ return /* @__PURE__ */ jsx(MediaWalletAppContext.Provider, { value: app, children: /* @__PURE__ */ jsx(AnimatePresence, { children: open && /* @__PURE__ */ jsxs(Fragment, { children: [
42
+ /* @__PURE__ */ jsx(
43
+ motion.div,
44
+ {
45
+ className: "nav-canvas-overlay",
46
+ initial: { opacity: 0 },
47
+ animate: { opacity: 1 },
48
+ exit: { opacity: 0 },
49
+ transition: { duration: 0.15 },
50
+ onClick: close
51
+ }
52
+ ),
53
+ /* @__PURE__ */ jsx(
54
+ motion.div,
55
+ {
56
+ className: "fixed inset-0 z-[101] flex items-end justify-center p-3 pb-4 sm:items-center sm:p-4",
57
+ initial: { opacity: 0, y: 24, scale: 1 },
58
+ animate: { opacity: 1, y: 0, scale: 1 },
59
+ exit: { opacity: 0, y: 24 },
60
+ transition: { duration: 0.18, ease: "easeOut" },
61
+ onClick: close,
62
+ children: /* @__PURE__ */ jsxs(
63
+ "div",
64
+ {
65
+ id: MEDIA_WALLET_PORTAL_ID,
66
+ className: "relative flex w-full max-w-[390px] flex-col overflow-hidden rounded-[32px] aspect-[9/19.5] max-h-[85dvh] bg-background",
67
+ onClick: (e) => e.stopPropagation(),
68
+ children: [
69
+ /* @__PURE__ */ jsxs("div", { className: "absolute right-3 top-3 z-20 flex items-center gap-2", children: [
70
+ /* @__PURE__ */ jsx(
71
+ Link,
72
+ {
73
+ href: "/settings",
74
+ onClick: close,
75
+ "aria-label": "Settings",
76
+ className: "grid h-8 w-8 place-items-center rounded-full bg-foreground/[0.06] text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground",
77
+ children: /* @__PURE__ */ jsx(CurrencyIcon, { symbol: "STRK", size: 16 })
78
+ }
79
+ ),
80
+ /* @__PURE__ */ jsx(
81
+ "button",
82
+ {
83
+ onClick: close,
84
+ "aria-label": "Close wallet",
85
+ className: "grid h-8 w-8 place-items-center rounded-full bg-foreground/[0.06] text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground",
86
+ children: /* @__PURE__ */ jsx(X, { className: "h-4 w-4" })
87
+ }
88
+ )
89
+ ] }),
90
+ /* @__PURE__ */ jsx("div", { className: "min-h-0 flex-1 overflow-y-auto overscroll-contain", children: /* @__PURE__ */ jsx(MediaWallet, { onClose: close, initialView }) })
91
+ ]
92
+ }
93
+ )
94
+ }
95
+ )
96
+ ] }) }) });
97
+ }
98
+ export {
99
+ MediaWalletOverlay,
100
+ useMediaWallet
101
+ };
102
+ //# sourceMappingURL=media-wallet-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/media-wallet/media-wallet-overlay.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport Link from \"../link.js\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { X } from \"lucide-react\";\nimport { CurrencyIcon } from \"../currency-icon.js\";\nimport { MediaWallet } from \"./media-wallet.js\";\nimport { MEDIA_WALLET_PORTAL_ID } from \"./action-modal.js\";\nimport { MediaWalletAppContext, type MediaWalletAppProps, type MediaWalletView } from \"./types.js\";\n\nconst WL_OPEN = \"ml:media-wallet-open\";\nconst WL_CLOSE = \"ml:media-wallet-close\";\n\nexport function useMediaWallet() {\n return {\n open: (view?: MediaWalletView) =>\n document.dispatchEvent(new CustomEvent<MediaWalletView | undefined>(WL_OPEN, { detail: view })),\n close: () => document.dispatchEvent(new CustomEvent(WL_CLOSE)),\n };\n}\n\nexport function MediaWalletOverlay(app: MediaWalletAppProps) {\n const [open, setOpen] = React.useState(false);\n const [initialView, setInitialView] = React.useState<MediaWalletView | undefined>(undefined);\n\n React.useEffect(() => {\n const onOpen = (e: Event) => {\n setInitialView((e as CustomEvent<MediaWalletView | undefined>).detail);\n setOpen(true);\n };\n const onClose = () => setOpen(false);\n const onKey = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n document.addEventListener(WL_OPEN, onOpen);\n document.addEventListener(WL_CLOSE, onClose);\n document.addEventListener(\"keydown\", onKey);\n return () => {\n document.removeEventListener(WL_OPEN, onOpen);\n document.removeEventListener(WL_CLOSE, onClose);\n document.removeEventListener(\"keydown\", onKey);\n };\n }, []);\n\n const close = () => setOpen(false);\n\n return (\n <MediaWalletAppContext.Provider value={app}>\n <AnimatePresence>\n {open && (\n <>\n <motion.div\n className=\"nav-canvas-overlay\"\n initial={{ opacity: 0 }}\n animate={{ opacity: 1 }}\n exit={{ opacity: 0 }}\n transition={{ duration: 0.15 }}\n onClick={close}\n />\n <motion.div\n className=\"fixed inset-0 z-[101] flex items-end justify-center p-3 pb-4 sm:items-center sm:p-4\"\n initial={{ opacity: 0, y: 24, scale: 1 }}\n animate={{ opacity: 1, y: 0, scale: 1 }}\n exit={{ opacity: 0, y: 24 }}\n transition={{ duration: 0.18, ease: \"easeOut\" }}\n onClick={close}\n >\n <div\n id={MEDIA_WALLET_PORTAL_ID}\n className={\n \"relative flex w-full max-w-[390px] flex-col overflow-hidden rounded-[32px] \" +\n \"aspect-[9/19.5] max-h-[85dvh] \" +\n \"bg-background\"\n }\n onClick={(e) => e.stopPropagation()}\n >\n <div className=\"absolute right-3 top-3 z-20 flex items-center gap-2\">\n <Link\n href=\"/settings\"\n onClick={close}\n aria-label=\"Settings\"\n className=\"grid h-8 w-8 place-items-center rounded-full bg-foreground/[0.06] text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground\"\n >\n <CurrencyIcon symbol=\"STRK\" size={16} />\n </Link>\n <button\n onClick={close}\n aria-label=\"Close wallet\"\n className=\"grid h-8 w-8 place-items-center rounded-full bg-foreground/[0.06] text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground\"\n >\n <X className=\"h-4 w-4\" />\n </button>\n </div>\n <div className=\"min-h-0 flex-1 overflow-y-auto overscroll-contain\">\n <MediaWallet onClose={close} initialView={initialView} />\n </div>\n </div>\n </motion.div>\n </>\n )}\n </AnimatePresence>\n </MediaWalletAppContext.Provider>\n );\n}\n"],"mappings":";AAmDQ,mBACE,KAyBI,YA1BN;AAjDR,YAAY,WAAW;AACvB,OAAO,UAAU;AACjB,SAAS,iBAAiB,cAAc;AACxC,SAAS,SAAS;AAClB,SAAS,oBAAoB;AAC7B,SAAS,mBAAmB;AAC5B,SAAS,8BAA8B;AACvC,SAAS,6BAA6E;AAEtF,MAAM,UAAU;AAChB,MAAM,WAAW;AAEV,SAAS,iBAAiB;AAC/B,SAAO;AAAA,IACL,MAAM,CAAC,SACL,SAAS,cAAc,IAAI,YAAyC,SAAS,EAAE,QAAQ,KAAK,CAAC,CAAC;AAAA,IAChG,OAAO,MAAM,SAAS,cAAc,IAAI,YAAY,QAAQ,CAAC;AAAA,EAC/D;AACF;AAEO,SAAS,mBAAmB,KAA0B;AAC3D,QAAM,CAAC,MAAM,OAAO,IAAI,MAAM,SAAS,KAAK;AAC5C,QAAM,CAAC,aAAa,cAAc,IAAI,MAAM,SAAsC,MAAS;AAE3F,QAAM,UAAU,MAAM;AACpB,UAAM,SAAS,CAAC,MAAa;AAC3B,qBAAgB,EAA+C,MAAM;AACrE,cAAQ,IAAI;AAAA,IACd;AACA,UAAM,UAAU,MAAM,QAAQ,KAAK;AACnC,UAAM,QAAQ,CAAC,MAAqB;AAClC,UAAI,EAAE,QAAQ,SAAU,SAAQ,KAAK;AAAA,IACvC;AACA,aAAS,iBAAiB,SAAS,MAAM;AACzC,aAAS,iBAAiB,UAAU,OAAO;AAC3C,aAAS,iBAAiB,WAAW,KAAK;AAC1C,WAAO,MAAM;AACX,eAAS,oBAAoB,SAAS,MAAM;AAC5C,eAAS,oBAAoB,UAAU,OAAO;AAC9C,eAAS,oBAAoB,WAAW,KAAK;AAAA,IAC/C;AAAA,EACF,GAAG,CAAC,CAAC;AAEL,QAAM,QAAQ,MAAM,QAAQ,KAAK;AAEjC,SACE,oBAAC,sBAAsB,UAAtB,EAA+B,OAAO,KACvC,8BAAC,mBACE,kBACC,iCACE;AAAA;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACC,WAAU;AAAA,QACV,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,SAAS,EAAE,SAAS,EAAE;AAAA,QACtB,MAAM,EAAE,SAAS,EAAE;AAAA,QACnB,YAAY,EAAE,UAAU,KAAK;AAAA,QAC7B,SAAS;AAAA;AAAA,IACX;AAAA,IACA;AAAA,MAAC,OAAO;AAAA,MAAP;AAAA,QACC,WAAU;AAAA,QACV,SAAS,EAAE,SAAS,GAAG,GAAG,IAAI,OAAO,EAAE;AAAA,QACvC,SAAS,EAAE,SAAS,GAAG,GAAG,GAAG,OAAO,EAAE;AAAA,QACtC,MAAM,EAAE,SAAS,GAAG,GAAG,GAAG;AAAA,QAC1B,YAAY,EAAE,UAAU,MAAM,MAAM,UAAU;AAAA,QAC9C,SAAS;AAAA,QAET;AAAA,UAAC;AAAA;AAAA,YACC,IAAI;AAAA,YACJ,WACE;AAAA,YAIF,SAAS,CAAC,MAAM,EAAE,gBAAgB;AAAA,YAElC;AAAA,mCAAC,SAAI,WAAU,uDACb;AAAA;AAAA,kBAAC;AAAA;AAAA,oBACC,MAAK;AAAA,oBACL,SAAS;AAAA,oBACT,cAAW;AAAA,oBACX,WAAU;AAAA,oBAEV,8BAAC,gBAAa,QAAO,QAAO,MAAM,IAAI;AAAA;AAAA,gBACxC;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAS;AAAA,oBACT,cAAW;AAAA,oBACX,WAAU;AAAA,oBAEV,8BAAC,KAAE,WAAU,WAAU;AAAA;AAAA,gBACzB;AAAA,iBACF;AAAA,cACA,oBAAC,SAAI,WAAU,qDACb,8BAAC,eAAY,SAAS,OAAO,aAA0B,GACzD;AAAA;AAAA;AAAA,QACF;AAAA;AAAA,IACF;AAAA,KACF,GAEJ,GACA;AAEJ;","names":[]}
@@ -0,0 +1,313 @@
1
+ "use strict";
2
+ "use client";
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+ var media_wallet_send_exports = {};
21
+ __export(media_wallet_send_exports, {
22
+ MediaWalletSend: () => MediaWalletSend
23
+ });
24
+ module.exports = __toCommonJS(media_wallet_send_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_react = require("react");
27
+ var import_starknet = require("starknet");
28
+ var import_sdk = require("@medialane/sdk");
29
+ var import_action_button = require("../action-button.js");
30
+ var import_currency_icon = require("../currency-icon.js");
31
+ var import_describe_error = require("../../utils/describe-error.js");
32
+ var import_use_erc20_balance = require("../../utils/media-wallet/use-erc20-balance.js");
33
+ var import_wallet_format = require("../../utils/media-wallet/wallet-format.js");
34
+ var import_back_button = require("./back-button.js");
35
+ var import_action_button2 = require("./action-button.js");
36
+ var import_action_modal = require("./action-modal.js");
37
+ var import_currency_sheet = require("./currency-sheet.js");
38
+ var import_wallet_tokens = require("../../utils/media-wallet/wallet-tokens.js");
39
+ var import_success_dialog = require("./success-dialog.js");
40
+ var import_types = require("./types.js");
41
+ var import_run_intent_calls = require("../../utils/media-wallet/run-intent-calls.js");
42
+ function isValidStarknetAddress(address) {
43
+ try {
44
+ (0, import_starknet.validateAndParseAddress)(address.trim());
45
+ return true;
46
+ } catch {
47
+ return false;
48
+ }
49
+ }
50
+ async function estimateSendFee(provider, address, token, to, amountRaw) {
51
+ const account = new import_starknet.Account({ provider, address, signer: "0x1", cairoVersion: "1" });
52
+ const call = {
53
+ contractAddress: token,
54
+ entrypoint: "transfer",
55
+ calldata: import_starknet.CallData.compile({ recipient: to, amount: import_starknet.cairo.uint256(amountRaw) })
56
+ };
57
+ const est = await account.estimateInvokeFee(call);
58
+ return { feeRaw: est.overall_fee, unit: est.unit };
59
+ }
60
+ function MediaWalletSend({
61
+ initialToken,
62
+ onNavigate,
63
+ onDone
64
+ }) {
65
+ const { useWalletSession, provider, getClient, useWriteAction } = (0, import_types.useMediaWalletApp)();
66
+ const { address } = useWalletSession();
67
+ const { run, status, reset, error } = useWriteAction();
68
+ const [currency, setCurrency] = (0, import_react.useState)(initialToken ?? import_wallet_tokens.WALLET_TOKENS[0]);
69
+ const [pickerOpen, setPickerOpen] = (0, import_react.useState)(false);
70
+ const strk = (0, import_use_erc20_balance.useTokenBalance)(provider, "STRK", address);
71
+ const eth = (0, import_use_erc20_balance.useTokenBalance)(provider, "ETH", address);
72
+ const usdc = (0, import_use_erc20_balance.useTokenBalance)(provider, "USDC", address);
73
+ const wbtc = (0, import_use_erc20_balance.useTokenBalance)(provider, "WBTC", address);
74
+ const pinnedBalancesBySymbol = {
75
+ STRK: strk.rawBalance,
76
+ ETH: eth.rawBalance,
77
+ USDC: usdc.rawBalance,
78
+ WBTC: wbtc.rawBalance
79
+ };
80
+ const { rawBalance: currencyBalance } = (0, import_use_erc20_balance.useErc20Balance)(provider, currency.address, address);
81
+ const [to, setTo] = (0, import_react.useState)("");
82
+ const [amount, setAmount] = (0, import_react.useState)("");
83
+ const [txHash, setTxHash] = (0, import_react.useState)(null);
84
+ const [confirmOpen, setConfirmOpen] = (0, import_react.useState)(false);
85
+ const [fee, setFee] = (0, import_react.useState)(null);
86
+ const [feeError, setFeeError] = (0, import_react.useState)(null);
87
+ const recipientValid = isValidStarknetAddress(to);
88
+ let amountRaw;
89
+ try {
90
+ amountRaw = amount.trim() ? BigInt((0, import_sdk.parseAmount)(amount.trim(), currency.decimals)) : null;
91
+ } catch {
92
+ amountRaw = null;
93
+ }
94
+ const amountOverBalance = amountRaw != null && currencyBalance != null && amountRaw > currencyBalance;
95
+ const composeReady = recipientValid && amountRaw != null && amountRaw > 0n && !amountOverBalance;
96
+ const pasteRecipient = async () => {
97
+ try {
98
+ const text = await navigator.clipboard.readText();
99
+ if (text) setTo(text.trim());
100
+ } catch {
101
+ }
102
+ };
103
+ const setMax = () => {
104
+ if (currencyBalance == null) return;
105
+ setAmount((0, import_sdk.formatAmount)(currencyBalance.toString(), currency.decimals));
106
+ };
107
+ const openReview = () => {
108
+ if (!address || !composeReady || amountRaw == null) return;
109
+ setFeeError(null);
110
+ setFee(null);
111
+ setConfirmOpen(true);
112
+ estimateSendFee(provider, address, currency.address, to.trim(), amountRaw).then((f) => setFee({ raw: f.feeRaw, unit: f.unit })).catch((e) => setFeeError((0, import_describe_error.describeError)(e, "We couldn't estimate the network fee. Please try again.").message));
113
+ };
114
+ const send = async () => {
115
+ if (!composeReady || amountRaw == null) return;
116
+ setConfirmOpen(false);
117
+ const dest = to.trim();
118
+ const amt = amountRaw;
119
+ await run(async (signer) => {
120
+ const result = await (0, import_run_intent_calls.runIntentCalls)(
121
+ signer,
122
+ () => getClient().api.createTransferTokenIntent({ owner: signer.address, token: currency.address, recipient: dest, amount: amt.toString() })
123
+ );
124
+ setTxHash(result.txHash);
125
+ return result;
126
+ });
127
+ };
128
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("main", { className: "flex flex-col gap-6 px-5 pb-8 pt-2", children: [
129
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-3", children: [
130
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_back_button.BackButton, { onBack: () => onNavigate({ name: "home" }) }),
131
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("h1", { className: "font-[family-name:var(--font-display)] text-2xl font-extrabold tracking-tight", children: "Send" })
132
+ ] }),
133
+ error && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "rounded-2xl border border-destructive/40 bg-destructive/10 p-3 text-xs leading-relaxed", children: [
134
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("b", { children: "Something went wrong." }),
135
+ " ",
136
+ error
137
+ ] }),
138
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-3", children: [
139
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
140
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-2", children: [
141
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
142
+ "input",
143
+ {
144
+ value: to,
145
+ onChange: (e) => setTo(e.target.value),
146
+ placeholder: "Recipient 0x\u2026",
147
+ spellCheck: false,
148
+ className: "w-0 flex-1 rounded-2xl border border-border bg-foreground/[0.05] px-4 py-3 font-mono text-sm outline-none transition-colors focus:border-brand-purple"
149
+ }
150
+ ),
151
+ to.trim() === "" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
152
+ "button",
153
+ {
154
+ onClick: pasteRecipient,
155
+ className: "shrink-0 rounded-2xl border border-border bg-foreground/[0.05] px-3 py-3 text-xs font-semibold text-muted-foreground transition-colors hover:text-foreground",
156
+ children: "Paste"
157
+ }
158
+ )
159
+ ] }),
160
+ to.trim() !== "" && !recipientValid && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "mt-1.5 px-1 text-xs text-destructive", children: "Not a valid Starknet address." })
161
+ ] }),
162
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
163
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "relative", children: [
164
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
165
+ "input",
166
+ {
167
+ value: amount,
168
+ onChange: (e) => setAmount(e.target.value.replace(/[^0-9.]/g, "")),
169
+ placeholder: "0.00",
170
+ inputMode: "decimal",
171
+ className: "w-full rounded-2xl border border-border bg-foreground/[0.05] px-4 py-3 pr-36 text-sm outline-none transition-colors focus:border-brand-purple"
172
+ }
173
+ ),
174
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "absolute right-2.5 top-1/2 flex -translate-y-1/2 items-center gap-1.5", children: [
175
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
176
+ "button",
177
+ {
178
+ onClick: setMax,
179
+ className: "rounded-full bg-foreground/[0.06] px-2 py-1 text-[11px] font-bold text-muted-foreground transition-colors hover:text-foreground",
180
+ children: "MAX"
181
+ }
182
+ ),
183
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
184
+ "button",
185
+ {
186
+ onClick: () => setPickerOpen(true),
187
+ className: "flex items-center gap-1.5 rounded-full bg-foreground/[0.06] px-2.5 py-1 text-xs font-semibold",
188
+ children: [
189
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_currency_icon.CurrencyIcon, { symbol: currency.symbol, size: 16 }),
190
+ " ",
191
+ currency.symbol
192
+ ]
193
+ }
194
+ )
195
+ ] })
196
+ ] }),
197
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mt-1.5 flex items-center justify-between px-1", children: [
198
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "text-xs text-muted-foreground", children: [
199
+ "Balance: ",
200
+ currencyBalance != null ? (0, import_wallet_format.fmt)(currencyBalance, currency.decimals) : "\u2026"
201
+ ] }),
202
+ amountOverBalance && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-xs text-destructive", children: "Amount exceeds balance." })
203
+ ] })
204
+ ] }),
205
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
206
+ import_action_button.ActionButton,
207
+ {
208
+ action: "offer",
209
+ big: true,
210
+ onClick: openReview,
211
+ disabled: status === "processing" || !composeReady,
212
+ className: "mt-1 w-full disabled:pointer-events-none disabled:opacity-40",
213
+ children: "Review Transfer"
214
+ }
215
+ ),
216
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_action_button2.TrustNote, { children: "Gas paid from your balance. Transfers are permanent and recorded onchain." })
217
+ ] }),
218
+ pickerOpen && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
219
+ import_currency_sheet.CurrencySheet,
220
+ {
221
+ title: "Choose currency",
222
+ tokens: import_wallet_tokens.WALLET_TOKENS,
223
+ balances: pinnedBalancesBySymbol,
224
+ onSelect: (t) => {
225
+ setCurrency(t);
226
+ setPickerOpen(false);
227
+ },
228
+ onClose: () => setPickerOpen(false)
229
+ }
230
+ ),
231
+ confirmOpen && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_action_modal.ActionModal, { title: "Review Transfer", onClose: () => setConfirmOpen(false), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-4", children: [
232
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-3", children: [
233
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid h-10 w-10 shrink-0 place-items-center rounded-full bg-foreground/[0.06]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M22 2L11 13M22 2l-7 20-4-9-9-4 20-7z" }) }) }),
234
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0 flex-1", children: [
235
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "font-semibold", children: "Send" }),
236
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "truncate font-mono text-xs text-muted-foreground", children: [
237
+ "To: ",
238
+ (0, import_wallet_format.short)(to.trim())
239
+ ] })
240
+ ] })
241
+ ] }),
242
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center gap-3 rounded-2xl bg-foreground/[0.05] p-4", children: [
243
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_currency_icon.CurrencyIcon, { symbol: currency.symbol, size: 28 }),
244
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "min-w-0 flex-1 font-semibold", children: currency.symbol }),
245
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-right font-semibold tabular-nums", children: [
246
+ "\u2212",
247
+ amount.trim(),
248
+ " ",
249
+ currency.symbol
250
+ ] })
251
+ ] }),
252
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col divide-y divide-border/40 rounded-2xl bg-foreground/[0.05] px-4", children: [
253
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between py-3 text-sm", children: [
254
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground", children: "Amount" }),
255
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { className: "font-medium", children: [
256
+ amount.trim(),
257
+ " ",
258
+ currency.symbol
259
+ ] })
260
+ ] }),
261
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between py-3 text-sm", children: [
262
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground", children: "Recipient" }),
263
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-mono font-medium", children: (0, import_wallet_format.short)(to.trim()) })
264
+ ] }),
265
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between py-3 text-sm", children: [
266
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground", children: "Contract" }),
267
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-medium", children: currency.symbol })
268
+ ] }),
269
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between py-3 text-sm", children: [
270
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground", children: "Call" }),
271
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-medium underline", children: "transfer" })
272
+ ] })
273
+ ] }),
274
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between rounded-2xl border border-border px-4 py-3 text-sm", children: [
275
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground", children: "Estimated fee" }),
276
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-medium", children: feeError ? "Unavailable" : fee ? `${(0, import_wallet_format.fmt)(fee.raw, 18, 6)} ${fee.unit === "FRI" ? "STRK" : "ETH"}` : "Estimating\u2026" })
277
+ ] }),
278
+ feeError && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("p", { className: "px-1 text-xs text-destructive", children: [
279
+ "Fee estimate failed: ",
280
+ feeError
281
+ ] }),
282
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex gap-3", children: [
283
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
284
+ "button",
285
+ {
286
+ onClick: () => setConfirmOpen(false),
287
+ className: "flex-1 rounded-2xl border border-border py-3 text-sm font-semibold text-muted-foreground transition-colors hover:text-foreground",
288
+ children: "Reject"
289
+ }
290
+ ),
291
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_action_button.ActionButton, { action: "offer", big: true, onClick: send, className: "flex-1", children: "Confirm" })
292
+ ] })
293
+ ] }) }),
294
+ status === "processing" && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_action_modal.BusyOverlay, { label: "Signing & sending\u2026" }),
295
+ status === "success" && txHash && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
296
+ import_success_dialog.SuccessDialog,
297
+ {
298
+ title: "Sent",
299
+ message: `${amount.trim()} ${currency.symbol} is on its way.`,
300
+ txHash,
301
+ onClose: () => {
302
+ reset();
303
+ onDone();
304
+ }
305
+ }
306
+ )
307
+ ] });
308
+ }
309
+ // Annotate the CommonJS export names for ESM import in node:
310
+ 0 && (module.exports = {
311
+ MediaWalletSend
312
+ });
313
+ //# sourceMappingURL=media-wallet-send.cjs.map