@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,258 @@
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_home_exports = {};
31
+ __export(media_wallet_home_exports, {
32
+ MediaWalletHome: () => MediaWalletHome
33
+ });
34
+ module.exports = __toCommonJS(media_wallet_home_exports);
35
+ var import_jsx_runtime = require("react/jsx-runtime");
36
+ var import_react = require("react");
37
+ var import_link = __toESM(require("../link.js"), 1);
38
+ var import_router = require("../router.js");
39
+ var import_currency_icon = require("../currency-icon.js");
40
+ var import_use_erc20_balance = require("../../utils/media-wallet/use-erc20-balance.js");
41
+ var import_use_tokens_by_owner = require("../../utils/media-wallet/use-tokens-by-owner.js");
42
+ var import_activate_card = require("./activate-card.js");
43
+ var import_quick_action = require("./quick-action.js");
44
+ var import_receive_card = require("./receive-card.js");
45
+ var import_action_modal = require("./action-modal.js");
46
+ var import_section_header = require("./section-header.js");
47
+ var import_success_dialog = require("./success-dialog.js");
48
+ var import_media_wallet_header = require("./media-wallet-header.js");
49
+ var import_wallet_tokens = require("../../utils/media-wallet/wallet-tokens.js");
50
+ var import_nft_items = require("../../utils/media-wallet/nft-items.js");
51
+ var import_nft_strip = require("./nft-strip.js");
52
+ var import_use_usd_prices = require("../../utils/use-usd-prices.js");
53
+ var import_wallet_format = require("../../utils/media-wallet/wallet-format.js");
54
+ var import_types = require("./types.js");
55
+ function MediaWalletHome({
56
+ onNavigate,
57
+ onClose,
58
+ autoOpenReceive
59
+ }) {
60
+ const { useWalletSession, useEmailStatus, provider, getClient, resolveImage, emailBanner, externalWallet } = (0, import_types.useMediaWalletApp)();
61
+ const { address, isDeployed } = useWalletSession();
62
+ const emailStatus = useEmailStatus();
63
+ const router = (0, import_router.useRouter)();
64
+ const needsEmailVerification = !!emailStatus?.email && !emailStatus.emailVerified;
65
+ const balances = {
66
+ STRK: (0, import_use_erc20_balance.useTokenBalance)(provider, "STRK", address),
67
+ ETH: (0, import_use_erc20_balance.useTokenBalance)(provider, "ETH", address),
68
+ USDC: (0, import_use_erc20_balance.useTokenBalance)(provider, "USDC", address),
69
+ WBTC: (0, import_use_erc20_balance.useTokenBalance)(provider, "WBTC", address)
70
+ };
71
+ const { tokens, isLoading: loadingNfts } = (0, import_use_tokens_by_owner.useTokensByOwner)(getClient, address, 1, 6);
72
+ const nftItems = (0, import_nft_items.pickNftItems)(tokens, 6);
73
+ const usdPrices = (0, import_use_usd_prices.useUsdPrices)();
74
+ const [panel, setPanel] = (0, import_react.useState)(autoOpenReceive ? "receive" : null);
75
+ const [hideBalances, setHideBalances] = (0, import_react.useState)(false);
76
+ const [activated, setActivated] = (0, import_react.useState)(false);
77
+ const [pull, setPull] = (0, import_react.useState)(0);
78
+ const startY = (0, import_react.useRef)(null);
79
+ const mainRef = (0, import_react.useRef)(null);
80
+ (0, import_react.useEffect)(() => {
81
+ setHideBalances(localStorage.getItem("mediawallet.hideBalances") === "1");
82
+ }, []);
83
+ const scrollParent = () => mainRef.current?.parentElement ?? null;
84
+ const onTouchStart = (e) => {
85
+ const sc = scrollParent();
86
+ startY.current = sc && sc.scrollTop <= 0 ? e.touches[0].clientY : null;
87
+ };
88
+ const onTouchMove = (e) => {
89
+ if (startY.current == null) return;
90
+ const dy = e.touches[0].clientY - startY.current;
91
+ if (dy > 0) setPull(Math.min(dy * 0.5, 90));
92
+ };
93
+ const onTouchEnd = () => {
94
+ setPull(0);
95
+ startY.current = null;
96
+ };
97
+ const usd = (symbol) => {
98
+ const { rawBalance, decimals } = balances[symbol];
99
+ return (0, import_wallet_format.rawToNumber)(rawBalance, decimals) * ((0, import_use_usd_prices.usdPriceFor)(usdPrices, symbol) ?? 0);
100
+ };
101
+ const totalUsd = import_wallet_tokens.WALLET_TOKENS.reduce((sum, t) => sum + usd(t.symbol), 0);
102
+ const heldTokens = import_wallet_tokens.WALLET_TOKENS.filter((t) => (balances[t.symbol].rawBalance ?? 0n) > 0n);
103
+ const strkBalance = balances.STRK.rawBalance;
104
+ const funded = strkBalance != null && strkBalance > 0n;
105
+ const canSend = isDeployed === true && funded;
106
+ const goLaunch = () => {
107
+ onClose();
108
+ router.push("/launchpad");
109
+ };
110
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
111
+ "main",
112
+ {
113
+ ref: mainRef,
114
+ onTouchStart,
115
+ onTouchMove,
116
+ onTouchEnd,
117
+ className: "relative flex min-h-full flex-col gap-6 px-5 pb-8 pt-2",
118
+ style: { transform: pull ? `translateY(${pull}px)` : void 0, transition: pull ? "none" : "transform 0.2s ease" },
119
+ children: [
120
+ address && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col items-center gap-4", children: [
121
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_media_wallet_header.MediaWalletHeader, { address, onNavigate: onClose }),
122
+ (funded || isDeployed === false) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-[family-name:var(--font-display)] text-5xl font-extrabold tracking-tight tabular-nums", children: hideBalances ? "\u2022\u2022\u2022\u2022" : usdPrices === null ? "\u2026" : (0, import_wallet_format.fmtUsd)(totalUsd) })
123
+ ] }),
124
+ funded ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "grid grid-cols-4 gap-2", children: [
125
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_quick_action.QuickAction, { label: "Send", action: "buy", disabled: !canSend, onClick: () => onNavigate({ name: "send" }), icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowUp, {}) }),
126
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_quick_action.QuickAction, { label: "Receive", action: "offer", onClick: () => setPanel(panel === "receive" ? null : "receive"), icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ArrowDown, {}) }),
127
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_quick_action.QuickAction, { label: "Launch", action: "remix", onClick: goLaunch, icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RocketIcon, {}) }),
128
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_quick_action.QuickAction, { label: "Activity", action: "submit", onClick: () => onNavigate({ name: "activity" }), icon: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(ActivityIcon, {}) })
129
+ ] }) : isDeployed === null ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-3", children: [
130
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col items-center gap-3 py-2", children: [
131
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-3 w-16 animate-pulse rounded bg-foreground/[0.06]" }),
132
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-11 w-32 animate-pulse rounded bg-foreground/[0.06]" }),
133
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-[48px] w-40 animate-pulse rounded-[13px] bg-foreground/[0.06]" })
134
+ ] }),
135
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "h-[148px] animate-pulse rounded-[20px] bg-foreground/[0.04]" })
136
+ ] }) : isDeployed === true && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col gap-3", children: [
137
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex flex-col items-center gap-3 py-2", children: [
138
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Balance" }),
139
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "font-[family-name:var(--font-display)] text-5xl font-extrabold tracking-tight tabular-nums", children: hideBalances ? "\u2022\u2022\u2022\u2022" : usdPrices === null ? "\u2026" : (0, import_wallet_format.fmtUsd)(totalUsd) }),
140
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
141
+ "button",
142
+ {
143
+ onClick: () => setPanel(panel === "receive" ? null : "receive"),
144
+ className: "h-[48px] rounded-[13px] px-8 text-[15px] font-semibold text-white transition-transform active:scale-[0.99]",
145
+ style: { background: "linear-gradient(115deg,#3b7bff,#5b4ce6)" },
146
+ children: "Fund your account"
147
+ }
148
+ )
149
+ ] }),
150
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
151
+ "button",
152
+ {
153
+ onClick: goLaunch,
154
+ className: "flex flex-col items-center gap-2 rounded-[20px] border-2 border-dashed border-border px-6 py-8 text-center transition-colors hover:border-primary/50 active:scale-[0.99]",
155
+ children: [
156
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid h-11 w-11 place-items-center rounded-full bg-foreground/[0.06]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(RocketIcon, {}) }),
157
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-[15px] font-semibold text-foreground", children: "Creator Launchpad" }),
158
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-xs text-muted-foreground", children: "Protect and monetize your work" })
159
+ ]
160
+ }
161
+ )
162
+ ] }),
163
+ isDeployed === false && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_activate_card.ActivateCard, { onActivated: () => setActivated(true) }),
164
+ needsEmailVerification && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
165
+ import_link.default,
166
+ {
167
+ href: emailBanner.href,
168
+ onClick: onClose,
169
+ className: "flex items-center gap-3 rounded-2xl px-4 py-3 transition-opacity hover:opacity-90",
170
+ style: { background: "linear-gradient(115deg, hsl(var(--brand-orange) / 0.12), hsl(var(--brand-maeve, 327 64% 67%) / 0.12))" },
171
+ children: [
172
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid h-9 w-9 shrink-0 place-items-center rounded-full bg-brand-orange/15", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(MailIcon, {}) }),
173
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0 flex-1", children: [
174
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-semibold", children: "Verify your email" }),
175
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-xs text-muted-foreground", children: emailBanner.text(emailStatus?.deadline) })
176
+ ] })
177
+ ]
178
+ }
179
+ ),
180
+ panel === "receive" && address && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_action_modal.ActionModal, { onClose: () => setPanel(null), children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_receive_card.ReceiveCard, { address }) }),
181
+ heldTokens.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { children: [
182
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_section_header.SectionHeader, { title: "Tokens" }),
183
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-2 flex flex-col gap-2", children: heldTokens.map((t) => {
184
+ const { rawBalance, decimals } = balances[t.symbol];
185
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
186
+ "button",
187
+ {
188
+ onClick: () => onNavigate({ name: "token", token: t }),
189
+ className: "flex items-center gap-3 rounded-2xl bg-card/40 px-4 py-3 text-left backdrop-blur-sm transition-colors hover:bg-card/60",
190
+ children: [
191
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "grid h-11 w-11 shrink-0 place-items-center rounded-full bg-foreground/[0.06]", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_currency_icon.CurrencyIcon, { symbol: t.symbol, size: 24 }) }),
192
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "min-w-0 flex-1", children: [
193
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-semibold", children: t.symbol }),
194
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-xs text-muted-foreground", children: t.name })
195
+ ] }),
196
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "text-right", children: [
197
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-sm font-semibold tabular-nums", children: hideBalances ? "\u2022\u2022\u2022\u2022" : (0, import_wallet_format.fmt)(rawBalance, decimals) }),
198
+ !hideBalances && usdPrices !== null && /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "text-xs text-muted-foreground tabular-nums", children: (0, import_wallet_format.fmtUsd)(usd(t.symbol)) })
199
+ ] })
200
+ ]
201
+ },
202
+ t.symbol
203
+ );
204
+ }) })
205
+ ] }),
206
+ (nftItems.length > 0 || loadingNfts) && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("section", { children: [
207
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_section_header.SectionHeader, { title: "NFTs" }),
208
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { className: "mt-2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_nft_strip.NftStrip, { items: nftItems, isLoading: loadingNfts, onNavigate: onClose, resolveImage }) })
209
+ ] }),
210
+ activated && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
211
+ import_success_dialog.SuccessDialog,
212
+ {
213
+ title: "Account activated",
214
+ message: "Your account is live and ready to use",
215
+ onClose: () => setActivated(false)
216
+ }
217
+ ),
218
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
219
+ "a",
220
+ {
221
+ href: externalWallet.href,
222
+ target: "_blank",
223
+ rel: "noopener noreferrer",
224
+ className: "mt-auto text-center text-xs text-muted-foreground/60 transition-colors hover:text-muted-foreground",
225
+ children: externalWallet.label
226
+ }
227
+ )
228
+ ]
229
+ }
230
+ );
231
+ }
232
+ function ArrowUp() {
233
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { width: "19", height: "19", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M12 19V5M5 12l7-7 7 7" }) });
234
+ }
235
+ function ArrowDown() {
236
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { width: "19", height: "19", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M12 5v14M19 12l-7 7-7-7" }) });
237
+ }
238
+ function ActivityIcon() {
239
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.1", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M22 12h-4l-3 9L9 3l-3 9H2" }) });
240
+ }
241
+ function MailIcon() {
242
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "text-brand-orange", children: [
243
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2" }),
244
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7" })
245
+ ] });
246
+ }
247
+ function RocketIcon() {
248
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.1", strokeLinecap: "round", strokeLinejoin: "round", children: [
249
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 00-2.91-.09z" }),
250
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M12 15l-3-3a22 22 0 012-3.95A12.88 12.88 0 0122 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 01-4 2z" }),
251
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("path", { d: "M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5" })
252
+ ] });
253
+ }
254
+ // Annotate the CommonJS export names for ESM import in node:
255
+ 0 && (module.exports = {
256
+ MediaWalletHome
257
+ });
258
+ //# sourceMappingURL=media-wallet-home.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/media-wallet/media-wallet-home.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport Link from \"../link.js\";\nimport { useRouter } from \"../router.js\";\nimport { CurrencyIcon } from \"../currency-icon.js\";\nimport { useTokenBalance } from \"../../utils/media-wallet/use-erc20-balance.js\";\nimport { useTokensByOwner } from \"../../utils/media-wallet/use-tokens-by-owner.js\";\nimport { ActivateCard } from \"./activate-card.js\";\nimport { QuickAction } from \"./quick-action.js\";\nimport { ReceiveCard } from \"./receive-card.js\";\nimport { ActionModal } from \"./action-modal.js\";\nimport { SectionHeader } from \"./section-header.js\";\nimport { SuccessDialog } from \"./success-dialog.js\";\nimport { MediaWalletHeader } from \"./media-wallet-header.js\";\nimport { WALLET_TOKENS, type WalletToken } from \"../../utils/media-wallet/wallet-tokens.js\";\nimport { pickNftItems } from \"../../utils/media-wallet/nft-items.js\";\nimport { NftStrip } from \"./nft-strip.js\";\nimport { useUsdPrices, usdPriceFor } from \"../../utils/use-usd-prices.js\";\nimport { fmt, fmtUsd, rawToNumber } from \"../../utils/media-wallet/wallet-format.js\";\nimport { useMediaWalletApp, type MediaWalletView } from \"./types.js\";\n\nexport function MediaWalletHome({\n onNavigate,\n onClose,\n autoOpenReceive,\n}: {\n onNavigate: (view: MediaWalletView) => void;\n onClose: () => void;\n autoOpenReceive?: boolean;\n}) {\n const { useWalletSession, useEmailStatus, provider, getClient, resolveImage, emailBanner, externalWallet } = useMediaWalletApp();\n const { address, isDeployed } = useWalletSession();\n const emailStatus = useEmailStatus();\n const router = useRouter();\n const needsEmailVerification = !!emailStatus?.email && !emailStatus.emailVerified;\n\n const balances: Record<WalletToken[\"symbol\"], ReturnType<typeof useTokenBalance>> = {\n STRK: useTokenBalance(provider, \"STRK\", address),\n ETH: useTokenBalance(provider, \"ETH\", address),\n USDC: useTokenBalance(provider, \"USDC\", address),\n WBTC: useTokenBalance(provider, \"WBTC\", address),\n };\n\n const { tokens, isLoading: loadingNfts } = useTokensByOwner(getClient, address, 1, 6);\n const nftItems = pickNftItems(tokens, 6);\n\n const usdPrices = useUsdPrices();\n const [panel, setPanel] = useState<\"receive\" | null>(autoOpenReceive ? \"receive\" : null);\n const [hideBalances, setHideBalances] = useState(false);\n const [activated, setActivated] = useState(false);\n const [pull, setPull] = useState(0);\n const startY = useRef<number | null>(null);\n const mainRef = useRef<HTMLElement>(null);\n\n useEffect(() => {\n setHideBalances(localStorage.getItem(\"mediawallet.hideBalances\") === \"1\");\n }, []);\n\n const scrollParent = () => mainRef.current?.parentElement ?? null;\n const onTouchStart = (e: React.TouchEvent) => {\n const sc = scrollParent();\n startY.current = sc && sc.scrollTop <= 0 ? e.touches[0].clientY : null;\n };\n const onTouchMove = (e: React.TouchEvent) => {\n if (startY.current == null) return;\n const dy = e.touches[0].clientY - startY.current;\n if (dy > 0) setPull(Math.min(dy * 0.5, 90));\n };\n const onTouchEnd = () => {\n setPull(0);\n startY.current = null;\n };\n\n const usd = (symbol: WalletToken[\"symbol\"]) => {\n const { rawBalance, decimals } = balances[symbol];\n return rawToNumber(rawBalance, decimals) * (usdPriceFor(usdPrices, symbol) ?? 0);\n };\n const totalUsd = WALLET_TOKENS.reduce((sum, t) => sum + usd(t.symbol), 0);\n const heldTokens = WALLET_TOKENS.filter((t) => (balances[t.symbol].rawBalance ?? 0n) > 0n);\n\n const strkBalance = balances.STRK.rawBalance;\n const funded = strkBalance != null && strkBalance > 0n;\n const canSend = isDeployed === true && funded;\n\n const goLaunch = () => {\n onClose();\n router.push(\"/launchpad\");\n };\n\n return (\n <main\n ref={mainRef}\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n className=\"relative flex min-h-full flex-col gap-6 px-5 pb-8 pt-2\"\n style={{ transform: pull ? `translateY(${pull}px)` : undefined, transition: pull ? \"none\" : \"transform 0.2s ease\" }}\n >\n {address && (\n <div className=\"flex flex-col items-center gap-4\">\n <MediaWalletHeader address={address} onNavigate={onClose} />\n {(funded || isDeployed === false) && (\n <span className=\"font-[family-name:var(--font-display)] text-5xl font-extrabold tracking-tight tabular-nums\">\n {hideBalances ? \"••••\" : usdPrices === null ? \"…\" : fmtUsd(totalUsd)}\n </span>\n )}\n </div>\n )}\n\n {funded ? (\n <div className=\"grid grid-cols-4 gap-2\">\n <QuickAction label=\"Send\" action=\"buy\" disabled={!canSend} onClick={() => onNavigate({ name: \"send\" })} icon={<ArrowUp />} />\n <QuickAction label=\"Receive\" action=\"offer\" onClick={() => setPanel(panel === \"receive\" ? null : \"receive\")} icon={<ArrowDown />} />\n <QuickAction label=\"Launch\" action=\"remix\" onClick={goLaunch} icon={<RocketIcon />} />\n <QuickAction label=\"Activity\" action=\"submit\" onClick={() => onNavigate({ name: \"activity\" })} icon={<ActivityIcon />} />\n </div>\n ) : isDeployed === null ? (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col items-center gap-3 py-2\">\n <div className=\"h-3 w-16 animate-pulse rounded bg-foreground/[0.06]\" />\n <div className=\"h-11 w-32 animate-pulse rounded bg-foreground/[0.06]\" />\n <div className=\"h-[48px] w-40 animate-pulse rounded-[13px] bg-foreground/[0.06]\" />\n </div>\n <div className=\"h-[148px] animate-pulse rounded-[20px] bg-foreground/[0.04]\" />\n </div>\n ) : (\n isDeployed === true && (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col items-center gap-3 py-2\">\n <span className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">Balance</span>\n <span className=\"font-[family-name:var(--font-display)] text-5xl font-extrabold tracking-tight tabular-nums\">\n {hideBalances ? \"••••\" : usdPrices === null ? \"…\" : fmtUsd(totalUsd)}\n </span>\n <button\n onClick={() => setPanel(panel === \"receive\" ? null : \"receive\")}\n className=\"h-[48px] rounded-[13px] px-8 text-[15px] font-semibold text-white transition-transform active:scale-[0.99]\"\n style={{ background: \"linear-gradient(115deg,#3b7bff,#5b4ce6)\" }}\n >\n Fund your account\n </button>\n </div>\n <button\n onClick={goLaunch}\n className=\"flex flex-col items-center gap-2 rounded-[20px] border-2 border-dashed border-border px-6 py-8 text-center transition-colors hover:border-primary/50 active:scale-[0.99]\"\n >\n <div className=\"grid h-11 w-11 place-items-center rounded-full bg-foreground/[0.06]\">\n <RocketIcon />\n </div>\n <span className=\"text-[15px] font-semibold text-foreground\">Creator Launchpad</span>\n <span className=\"text-xs text-muted-foreground\">Protect and monetize your work</span>\n </button>\n </div>\n )\n )}\n\n {isDeployed === false && <ActivateCard onActivated={() => setActivated(true)} />}\n\n {needsEmailVerification && (\n <Link\n href={emailBanner.href}\n onClick={onClose}\n className=\"flex items-center gap-3 rounded-2xl px-4 py-3 transition-opacity hover:opacity-90\"\n style={{ background: \"linear-gradient(115deg, hsl(var(--brand-orange) / 0.12), hsl(var(--brand-maeve, 327 64% 67%) / 0.12))\" }}\n >\n <div className=\"grid h-9 w-9 shrink-0 place-items-center rounded-full bg-brand-orange/15\">\n <MailIcon />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-semibold\">Verify your email</div>\n <div className=\"text-xs text-muted-foreground\">{emailBanner.text(emailStatus?.deadline)}</div>\n </div>\n </Link>\n )}\n\n {panel === \"receive\" && address && (\n <ActionModal onClose={() => setPanel(null)}>\n <ReceiveCard address={address} />\n </ActionModal>\n )}\n\n {heldTokens.length > 0 && (\n <section>\n <SectionHeader title=\"Tokens\" />\n <div className=\"mt-2 flex flex-col gap-2\">\n {heldTokens.map((t) => {\n const { rawBalance, decimals } = balances[t.symbol];\n return (\n <button\n key={t.symbol}\n onClick={() => onNavigate({ name: \"token\", token: t })}\n className=\"flex items-center gap-3 rounded-2xl bg-card/40 px-4 py-3 text-left backdrop-blur-sm transition-colors hover:bg-card/60\"\n >\n <div className=\"grid h-11 w-11 shrink-0 place-items-center rounded-full bg-foreground/[0.06]\">\n <CurrencyIcon symbol={t.symbol} size={24} />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-semibold\">{t.symbol}</div>\n <div className=\"text-xs text-muted-foreground\">{t.name}</div>\n </div>\n <div className=\"text-right\">\n <div className=\"text-sm font-semibold tabular-nums\">{hideBalances ? \"••••\" : fmt(rawBalance, decimals)}</div>\n {!hideBalances && usdPrices !== null && (\n <div className=\"text-xs text-muted-foreground tabular-nums\">{fmtUsd(usd(t.symbol))}</div>\n )}\n </div>\n </button>\n );\n })}\n </div>\n </section>\n )}\n\n {(nftItems.length > 0 || loadingNfts) && (\n <section>\n <SectionHeader title=\"NFTs\" />\n <div className=\"mt-2\">\n <NftStrip items={nftItems} isLoading={loadingNfts} onNavigate={onClose} resolveImage={resolveImage} />\n </div>\n </section>\n )}\n\n {activated && (\n <SuccessDialog\n title=\"Account activated\"\n message=\"Your account is live and ready to use\"\n onClose={() => setActivated(false)}\n />\n )}\n\n <a\n href={externalWallet.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mt-auto text-center text-xs text-muted-foreground/60 transition-colors hover:text-muted-foreground\"\n >\n {externalWallet.label}\n </a>\n </main>\n );\n}\n\nfunction ArrowUp() {\n return (\n <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 19V5M5 12l7-7 7 7\" />\n </svg>\n );\n}\nfunction ArrowDown() {\n return (\n <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 5v14M19 12l-7 7-7-7\" />\n </svg>\n );\n}\nfunction ActivityIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 12h-4l-3 9L9 3l-3 9H2\" />\n </svg>\n );\n}\nfunction MailIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-brand-orange\">\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n );\n}\nfunction RocketIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 00-2.91-.09z\" />\n <path d=\"M12 15l-3-3a22 22 0 012-3.95A12.88 12.88 0 0122 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 01-4 2z\" />\n <path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" />\n </svg>\n );\n}\n"],"mappings":"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","names":["Link"]}
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { 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 MediaWalletHome({ onNavigate, onClose, autoOpenReceive, }: {
9
+ onNavigate: (view: MediaWalletView) => void;
10
+ onClose: () => void;
11
+ autoOpenReceive?: boolean;
12
+ }): react_jsx_runtime.JSX.Element;
13
+
14
+ export { MediaWalletHome };
@@ -0,0 +1,14 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { 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 MediaWalletHome({ onNavigate, onClose, autoOpenReceive, }: {
9
+ onNavigate: (view: MediaWalletView) => void;
10
+ onClose: () => void;
11
+ autoOpenReceive?: boolean;
12
+ }): react_jsx_runtime.JSX.Element;
13
+
14
+ export { MediaWalletHome };
@@ -0,0 +1,224 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useEffect, useRef, useState } from "react";
4
+ import Link from "../link.js";
5
+ import { useRouter } from "../router.js";
6
+ import { CurrencyIcon } from "../currency-icon.js";
7
+ import { useTokenBalance } from "../../utils/media-wallet/use-erc20-balance.js";
8
+ import { useTokensByOwner } from "../../utils/media-wallet/use-tokens-by-owner.js";
9
+ import { ActivateCard } from "./activate-card.js";
10
+ import { QuickAction } from "./quick-action.js";
11
+ import { ReceiveCard } from "./receive-card.js";
12
+ import { ActionModal } from "./action-modal.js";
13
+ import { SectionHeader } from "./section-header.js";
14
+ import { SuccessDialog } from "./success-dialog.js";
15
+ import { MediaWalletHeader } from "./media-wallet-header.js";
16
+ import { WALLET_TOKENS } from "../../utils/media-wallet/wallet-tokens.js";
17
+ import { pickNftItems } from "../../utils/media-wallet/nft-items.js";
18
+ import { NftStrip } from "./nft-strip.js";
19
+ import { useUsdPrices, usdPriceFor } from "../../utils/use-usd-prices.js";
20
+ import { fmt, fmtUsd, rawToNumber } from "../../utils/media-wallet/wallet-format.js";
21
+ import { useMediaWalletApp } from "./types.js";
22
+ function MediaWalletHome({
23
+ onNavigate,
24
+ onClose,
25
+ autoOpenReceive
26
+ }) {
27
+ const { useWalletSession, useEmailStatus, provider, getClient, resolveImage, emailBanner, externalWallet } = useMediaWalletApp();
28
+ const { address, isDeployed } = useWalletSession();
29
+ const emailStatus = useEmailStatus();
30
+ const router = useRouter();
31
+ const needsEmailVerification = !!emailStatus?.email && !emailStatus.emailVerified;
32
+ const balances = {
33
+ STRK: useTokenBalance(provider, "STRK", address),
34
+ ETH: useTokenBalance(provider, "ETH", address),
35
+ USDC: useTokenBalance(provider, "USDC", address),
36
+ WBTC: useTokenBalance(provider, "WBTC", address)
37
+ };
38
+ const { tokens, isLoading: loadingNfts } = useTokensByOwner(getClient, address, 1, 6);
39
+ const nftItems = pickNftItems(tokens, 6);
40
+ const usdPrices = useUsdPrices();
41
+ const [panel, setPanel] = useState(autoOpenReceive ? "receive" : null);
42
+ const [hideBalances, setHideBalances] = useState(false);
43
+ const [activated, setActivated] = useState(false);
44
+ const [pull, setPull] = useState(0);
45
+ const startY = useRef(null);
46
+ const mainRef = useRef(null);
47
+ useEffect(() => {
48
+ setHideBalances(localStorage.getItem("mediawallet.hideBalances") === "1");
49
+ }, []);
50
+ const scrollParent = () => mainRef.current?.parentElement ?? null;
51
+ const onTouchStart = (e) => {
52
+ const sc = scrollParent();
53
+ startY.current = sc && sc.scrollTop <= 0 ? e.touches[0].clientY : null;
54
+ };
55
+ const onTouchMove = (e) => {
56
+ if (startY.current == null) return;
57
+ const dy = e.touches[0].clientY - startY.current;
58
+ if (dy > 0) setPull(Math.min(dy * 0.5, 90));
59
+ };
60
+ const onTouchEnd = () => {
61
+ setPull(0);
62
+ startY.current = null;
63
+ };
64
+ const usd = (symbol) => {
65
+ const { rawBalance, decimals } = balances[symbol];
66
+ return rawToNumber(rawBalance, decimals) * (usdPriceFor(usdPrices, symbol) ?? 0);
67
+ };
68
+ const totalUsd = WALLET_TOKENS.reduce((sum, t) => sum + usd(t.symbol), 0);
69
+ const heldTokens = WALLET_TOKENS.filter((t) => (balances[t.symbol].rawBalance ?? 0n) > 0n);
70
+ const strkBalance = balances.STRK.rawBalance;
71
+ const funded = strkBalance != null && strkBalance > 0n;
72
+ const canSend = isDeployed === true && funded;
73
+ const goLaunch = () => {
74
+ onClose();
75
+ router.push("/launchpad");
76
+ };
77
+ return /* @__PURE__ */ jsxs(
78
+ "main",
79
+ {
80
+ ref: mainRef,
81
+ onTouchStart,
82
+ onTouchMove,
83
+ onTouchEnd,
84
+ className: "relative flex min-h-full flex-col gap-6 px-5 pb-8 pt-2",
85
+ style: { transform: pull ? `translateY(${pull}px)` : void 0, transition: pull ? "none" : "transform 0.2s ease" },
86
+ children: [
87
+ address && /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-4", children: [
88
+ /* @__PURE__ */ jsx(MediaWalletHeader, { address, onNavigate: onClose }),
89
+ (funded || isDeployed === false) && /* @__PURE__ */ jsx("span", { className: "font-[family-name:var(--font-display)] text-5xl font-extrabold tracking-tight tabular-nums", children: hideBalances ? "\u2022\u2022\u2022\u2022" : usdPrices === null ? "\u2026" : fmtUsd(totalUsd) })
90
+ ] }),
91
+ funded ? /* @__PURE__ */ jsxs("div", { className: "grid grid-cols-4 gap-2", children: [
92
+ /* @__PURE__ */ jsx(QuickAction, { label: "Send", action: "buy", disabled: !canSend, onClick: () => onNavigate({ name: "send" }), icon: /* @__PURE__ */ jsx(ArrowUp, {}) }),
93
+ /* @__PURE__ */ jsx(QuickAction, { label: "Receive", action: "offer", onClick: () => setPanel(panel === "receive" ? null : "receive"), icon: /* @__PURE__ */ jsx(ArrowDown, {}) }),
94
+ /* @__PURE__ */ jsx(QuickAction, { label: "Launch", action: "remix", onClick: goLaunch, icon: /* @__PURE__ */ jsx(RocketIcon, {}) }),
95
+ /* @__PURE__ */ jsx(QuickAction, { label: "Activity", action: "submit", onClick: () => onNavigate({ name: "activity" }), icon: /* @__PURE__ */ jsx(ActivityIcon, {}) })
96
+ ] }) : isDeployed === null ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
97
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-3 py-2", children: [
98
+ /* @__PURE__ */ jsx("div", { className: "h-3 w-16 animate-pulse rounded bg-foreground/[0.06]" }),
99
+ /* @__PURE__ */ jsx("div", { className: "h-11 w-32 animate-pulse rounded bg-foreground/[0.06]" }),
100
+ /* @__PURE__ */ jsx("div", { className: "h-[48px] w-40 animate-pulse rounded-[13px] bg-foreground/[0.06]" })
101
+ ] }),
102
+ /* @__PURE__ */ jsx("div", { className: "h-[148px] animate-pulse rounded-[20px] bg-foreground/[0.04]" })
103
+ ] }) : isDeployed === true && /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-3", children: [
104
+ /* @__PURE__ */ jsxs("div", { className: "flex flex-col items-center gap-3 py-2", children: [
105
+ /* @__PURE__ */ jsx("span", { className: "text-xs font-semibold uppercase tracking-wide text-muted-foreground", children: "Balance" }),
106
+ /* @__PURE__ */ jsx("span", { className: "font-[family-name:var(--font-display)] text-5xl font-extrabold tracking-tight tabular-nums", children: hideBalances ? "\u2022\u2022\u2022\u2022" : usdPrices === null ? "\u2026" : fmtUsd(totalUsd) }),
107
+ /* @__PURE__ */ jsx(
108
+ "button",
109
+ {
110
+ onClick: () => setPanel(panel === "receive" ? null : "receive"),
111
+ className: "h-[48px] rounded-[13px] px-8 text-[15px] font-semibold text-white transition-transform active:scale-[0.99]",
112
+ style: { background: "linear-gradient(115deg,#3b7bff,#5b4ce6)" },
113
+ children: "Fund your account"
114
+ }
115
+ )
116
+ ] }),
117
+ /* @__PURE__ */ jsxs(
118
+ "button",
119
+ {
120
+ onClick: goLaunch,
121
+ className: "flex flex-col items-center gap-2 rounded-[20px] border-2 border-dashed border-border px-6 py-8 text-center transition-colors hover:border-primary/50 active:scale-[0.99]",
122
+ children: [
123
+ /* @__PURE__ */ jsx("div", { className: "grid h-11 w-11 place-items-center rounded-full bg-foreground/[0.06]", children: /* @__PURE__ */ jsx(RocketIcon, {}) }),
124
+ /* @__PURE__ */ jsx("span", { className: "text-[15px] font-semibold text-foreground", children: "Creator Launchpad" }),
125
+ /* @__PURE__ */ jsx("span", { className: "text-xs text-muted-foreground", children: "Protect and monetize your work" })
126
+ ]
127
+ }
128
+ )
129
+ ] }),
130
+ isDeployed === false && /* @__PURE__ */ jsx(ActivateCard, { onActivated: () => setActivated(true) }),
131
+ needsEmailVerification && /* @__PURE__ */ jsxs(
132
+ Link,
133
+ {
134
+ href: emailBanner.href,
135
+ onClick: onClose,
136
+ className: "flex items-center gap-3 rounded-2xl px-4 py-3 transition-opacity hover:opacity-90",
137
+ style: { background: "linear-gradient(115deg, hsl(var(--brand-orange) / 0.12), hsl(var(--brand-maeve, 327 64% 67%) / 0.12))" },
138
+ children: [
139
+ /* @__PURE__ */ jsx("div", { className: "grid h-9 w-9 shrink-0 place-items-center rounded-full bg-brand-orange/15", children: /* @__PURE__ */ jsx(MailIcon, {}) }),
140
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
141
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-semibold", children: "Verify your email" }),
142
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: emailBanner.text(emailStatus?.deadline) })
143
+ ] })
144
+ ]
145
+ }
146
+ ),
147
+ panel === "receive" && address && /* @__PURE__ */ jsx(ActionModal, { onClose: () => setPanel(null), children: /* @__PURE__ */ jsx(ReceiveCard, { address }) }),
148
+ heldTokens.length > 0 && /* @__PURE__ */ jsxs("section", { children: [
149
+ /* @__PURE__ */ jsx(SectionHeader, { title: "Tokens" }),
150
+ /* @__PURE__ */ jsx("div", { className: "mt-2 flex flex-col gap-2", children: heldTokens.map((t) => {
151
+ const { rawBalance, decimals } = balances[t.symbol];
152
+ return /* @__PURE__ */ jsxs(
153
+ "button",
154
+ {
155
+ onClick: () => onNavigate({ name: "token", token: t }),
156
+ className: "flex items-center gap-3 rounded-2xl bg-card/40 px-4 py-3 text-left backdrop-blur-sm transition-colors hover:bg-card/60",
157
+ children: [
158
+ /* @__PURE__ */ jsx("div", { className: "grid h-11 w-11 shrink-0 place-items-center rounded-full bg-foreground/[0.06]", children: /* @__PURE__ */ jsx(CurrencyIcon, { symbol: t.symbol, size: 24 }) }),
159
+ /* @__PURE__ */ jsxs("div", { className: "min-w-0 flex-1", children: [
160
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-semibold", children: t.symbol }),
161
+ /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground", children: t.name })
162
+ ] }),
163
+ /* @__PURE__ */ jsxs("div", { className: "text-right", children: [
164
+ /* @__PURE__ */ jsx("div", { className: "text-sm font-semibold tabular-nums", children: hideBalances ? "\u2022\u2022\u2022\u2022" : fmt(rawBalance, decimals) }),
165
+ !hideBalances && usdPrices !== null && /* @__PURE__ */ jsx("div", { className: "text-xs text-muted-foreground tabular-nums", children: fmtUsd(usd(t.symbol)) })
166
+ ] })
167
+ ]
168
+ },
169
+ t.symbol
170
+ );
171
+ }) })
172
+ ] }),
173
+ (nftItems.length > 0 || loadingNfts) && /* @__PURE__ */ jsxs("section", { children: [
174
+ /* @__PURE__ */ jsx(SectionHeader, { title: "NFTs" }),
175
+ /* @__PURE__ */ jsx("div", { className: "mt-2", children: /* @__PURE__ */ jsx(NftStrip, { items: nftItems, isLoading: loadingNfts, onNavigate: onClose, resolveImage }) })
176
+ ] }),
177
+ activated && /* @__PURE__ */ jsx(
178
+ SuccessDialog,
179
+ {
180
+ title: "Account activated",
181
+ message: "Your account is live and ready to use",
182
+ onClose: () => setActivated(false)
183
+ }
184
+ ),
185
+ /* @__PURE__ */ jsx(
186
+ "a",
187
+ {
188
+ href: externalWallet.href,
189
+ target: "_blank",
190
+ rel: "noopener noreferrer",
191
+ className: "mt-auto text-center text-xs text-muted-foreground/60 transition-colors hover:text-muted-foreground",
192
+ children: externalWallet.label
193
+ }
194
+ )
195
+ ]
196
+ }
197
+ );
198
+ }
199
+ function ArrowUp() {
200
+ return /* @__PURE__ */ jsx("svg", { width: "19", height: "19", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M12 19V5M5 12l7-7 7 7" }) });
201
+ }
202
+ function ArrowDown() {
203
+ return /* @__PURE__ */ jsx("svg", { width: "19", height: "19", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.2", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M12 5v14M19 12l-7 7-7-7" }) });
204
+ }
205
+ function ActivityIcon() {
206
+ return /* @__PURE__ */ jsx("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.1", strokeLinecap: "round", strokeLinejoin: "round", children: /* @__PURE__ */ jsx("path", { d: "M22 12h-4l-3 9L9 3l-3 9H2" }) });
207
+ }
208
+ function MailIcon() {
209
+ return /* @__PURE__ */ jsxs("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", className: "text-brand-orange", children: [
210
+ /* @__PURE__ */ jsx("rect", { x: "2", y: "4", width: "20", height: "16", rx: "2" }),
211
+ /* @__PURE__ */ jsx("path", { d: "m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7" })
212
+ ] });
213
+ }
214
+ function RocketIcon() {
215
+ return /* @__PURE__ */ jsxs("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2.1", strokeLinecap: "round", strokeLinejoin: "round", children: [
216
+ /* @__PURE__ */ jsx("path", { d: "M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 00-2.91-.09z" }),
217
+ /* @__PURE__ */ jsx("path", { d: "M12 15l-3-3a22 22 0 012-3.95A12.88 12.88 0 0122 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 01-4 2z" }),
218
+ /* @__PURE__ */ jsx("path", { d: "M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5" })
219
+ ] });
220
+ }
221
+ export {
222
+ MediaWalletHome
223
+ };
224
+ //# sourceMappingURL=media-wallet-home.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/media-wallet/media-wallet-home.tsx"],"sourcesContent":["\"use client\";\n\nimport { useEffect, useRef, useState } from \"react\";\nimport Link from \"../link.js\";\nimport { useRouter } from \"../router.js\";\nimport { CurrencyIcon } from \"../currency-icon.js\";\nimport { useTokenBalance } from \"../../utils/media-wallet/use-erc20-balance.js\";\nimport { useTokensByOwner } from \"../../utils/media-wallet/use-tokens-by-owner.js\";\nimport { ActivateCard } from \"./activate-card.js\";\nimport { QuickAction } from \"./quick-action.js\";\nimport { ReceiveCard } from \"./receive-card.js\";\nimport { ActionModal } from \"./action-modal.js\";\nimport { SectionHeader } from \"./section-header.js\";\nimport { SuccessDialog } from \"./success-dialog.js\";\nimport { MediaWalletHeader } from \"./media-wallet-header.js\";\nimport { WALLET_TOKENS, type WalletToken } from \"../../utils/media-wallet/wallet-tokens.js\";\nimport { pickNftItems } from \"../../utils/media-wallet/nft-items.js\";\nimport { NftStrip } from \"./nft-strip.js\";\nimport { useUsdPrices, usdPriceFor } from \"../../utils/use-usd-prices.js\";\nimport { fmt, fmtUsd, rawToNumber } from \"../../utils/media-wallet/wallet-format.js\";\nimport { useMediaWalletApp, type MediaWalletView } from \"./types.js\";\n\nexport function MediaWalletHome({\n onNavigate,\n onClose,\n autoOpenReceive,\n}: {\n onNavigate: (view: MediaWalletView) => void;\n onClose: () => void;\n autoOpenReceive?: boolean;\n}) {\n const { useWalletSession, useEmailStatus, provider, getClient, resolveImage, emailBanner, externalWallet } = useMediaWalletApp();\n const { address, isDeployed } = useWalletSession();\n const emailStatus = useEmailStatus();\n const router = useRouter();\n const needsEmailVerification = !!emailStatus?.email && !emailStatus.emailVerified;\n\n const balances: Record<WalletToken[\"symbol\"], ReturnType<typeof useTokenBalance>> = {\n STRK: useTokenBalance(provider, \"STRK\", address),\n ETH: useTokenBalance(provider, \"ETH\", address),\n USDC: useTokenBalance(provider, \"USDC\", address),\n WBTC: useTokenBalance(provider, \"WBTC\", address),\n };\n\n const { tokens, isLoading: loadingNfts } = useTokensByOwner(getClient, address, 1, 6);\n const nftItems = pickNftItems(tokens, 6);\n\n const usdPrices = useUsdPrices();\n const [panel, setPanel] = useState<\"receive\" | null>(autoOpenReceive ? \"receive\" : null);\n const [hideBalances, setHideBalances] = useState(false);\n const [activated, setActivated] = useState(false);\n const [pull, setPull] = useState(0);\n const startY = useRef<number | null>(null);\n const mainRef = useRef<HTMLElement>(null);\n\n useEffect(() => {\n setHideBalances(localStorage.getItem(\"mediawallet.hideBalances\") === \"1\");\n }, []);\n\n const scrollParent = () => mainRef.current?.parentElement ?? null;\n const onTouchStart = (e: React.TouchEvent) => {\n const sc = scrollParent();\n startY.current = sc && sc.scrollTop <= 0 ? e.touches[0].clientY : null;\n };\n const onTouchMove = (e: React.TouchEvent) => {\n if (startY.current == null) return;\n const dy = e.touches[0].clientY - startY.current;\n if (dy > 0) setPull(Math.min(dy * 0.5, 90));\n };\n const onTouchEnd = () => {\n setPull(0);\n startY.current = null;\n };\n\n const usd = (symbol: WalletToken[\"symbol\"]) => {\n const { rawBalance, decimals } = balances[symbol];\n return rawToNumber(rawBalance, decimals) * (usdPriceFor(usdPrices, symbol) ?? 0);\n };\n const totalUsd = WALLET_TOKENS.reduce((sum, t) => sum + usd(t.symbol), 0);\n const heldTokens = WALLET_TOKENS.filter((t) => (balances[t.symbol].rawBalance ?? 0n) > 0n);\n\n const strkBalance = balances.STRK.rawBalance;\n const funded = strkBalance != null && strkBalance > 0n;\n const canSend = isDeployed === true && funded;\n\n const goLaunch = () => {\n onClose();\n router.push(\"/launchpad\");\n };\n\n return (\n <main\n ref={mainRef}\n onTouchStart={onTouchStart}\n onTouchMove={onTouchMove}\n onTouchEnd={onTouchEnd}\n className=\"relative flex min-h-full flex-col gap-6 px-5 pb-8 pt-2\"\n style={{ transform: pull ? `translateY(${pull}px)` : undefined, transition: pull ? \"none\" : \"transform 0.2s ease\" }}\n >\n {address && (\n <div className=\"flex flex-col items-center gap-4\">\n <MediaWalletHeader address={address} onNavigate={onClose} />\n {(funded || isDeployed === false) && (\n <span className=\"font-[family-name:var(--font-display)] text-5xl font-extrabold tracking-tight tabular-nums\">\n {hideBalances ? \"••••\" : usdPrices === null ? \"…\" : fmtUsd(totalUsd)}\n </span>\n )}\n </div>\n )}\n\n {funded ? (\n <div className=\"grid grid-cols-4 gap-2\">\n <QuickAction label=\"Send\" action=\"buy\" disabled={!canSend} onClick={() => onNavigate({ name: \"send\" })} icon={<ArrowUp />} />\n <QuickAction label=\"Receive\" action=\"offer\" onClick={() => setPanel(panel === \"receive\" ? null : \"receive\")} icon={<ArrowDown />} />\n <QuickAction label=\"Launch\" action=\"remix\" onClick={goLaunch} icon={<RocketIcon />} />\n <QuickAction label=\"Activity\" action=\"submit\" onClick={() => onNavigate({ name: \"activity\" })} icon={<ActivityIcon />} />\n </div>\n ) : isDeployed === null ? (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col items-center gap-3 py-2\">\n <div className=\"h-3 w-16 animate-pulse rounded bg-foreground/[0.06]\" />\n <div className=\"h-11 w-32 animate-pulse rounded bg-foreground/[0.06]\" />\n <div className=\"h-[48px] w-40 animate-pulse rounded-[13px] bg-foreground/[0.06]\" />\n </div>\n <div className=\"h-[148px] animate-pulse rounded-[20px] bg-foreground/[0.04]\" />\n </div>\n ) : (\n isDeployed === true && (\n <div className=\"flex flex-col gap-3\">\n <div className=\"flex flex-col items-center gap-3 py-2\">\n <span className=\"text-xs font-semibold uppercase tracking-wide text-muted-foreground\">Balance</span>\n <span className=\"font-[family-name:var(--font-display)] text-5xl font-extrabold tracking-tight tabular-nums\">\n {hideBalances ? \"••••\" : usdPrices === null ? \"…\" : fmtUsd(totalUsd)}\n </span>\n <button\n onClick={() => setPanel(panel === \"receive\" ? null : \"receive\")}\n className=\"h-[48px] rounded-[13px] px-8 text-[15px] font-semibold text-white transition-transform active:scale-[0.99]\"\n style={{ background: \"linear-gradient(115deg,#3b7bff,#5b4ce6)\" }}\n >\n Fund your account\n </button>\n </div>\n <button\n onClick={goLaunch}\n className=\"flex flex-col items-center gap-2 rounded-[20px] border-2 border-dashed border-border px-6 py-8 text-center transition-colors hover:border-primary/50 active:scale-[0.99]\"\n >\n <div className=\"grid h-11 w-11 place-items-center rounded-full bg-foreground/[0.06]\">\n <RocketIcon />\n </div>\n <span className=\"text-[15px] font-semibold text-foreground\">Creator Launchpad</span>\n <span className=\"text-xs text-muted-foreground\">Protect and monetize your work</span>\n </button>\n </div>\n )\n )}\n\n {isDeployed === false && <ActivateCard onActivated={() => setActivated(true)} />}\n\n {needsEmailVerification && (\n <Link\n href={emailBanner.href}\n onClick={onClose}\n className=\"flex items-center gap-3 rounded-2xl px-4 py-3 transition-opacity hover:opacity-90\"\n style={{ background: \"linear-gradient(115deg, hsl(var(--brand-orange) / 0.12), hsl(var(--brand-maeve, 327 64% 67%) / 0.12))\" }}\n >\n <div className=\"grid h-9 w-9 shrink-0 place-items-center rounded-full bg-brand-orange/15\">\n <MailIcon />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-semibold\">Verify your email</div>\n <div className=\"text-xs text-muted-foreground\">{emailBanner.text(emailStatus?.deadline)}</div>\n </div>\n </Link>\n )}\n\n {panel === \"receive\" && address && (\n <ActionModal onClose={() => setPanel(null)}>\n <ReceiveCard address={address} />\n </ActionModal>\n )}\n\n {heldTokens.length > 0 && (\n <section>\n <SectionHeader title=\"Tokens\" />\n <div className=\"mt-2 flex flex-col gap-2\">\n {heldTokens.map((t) => {\n const { rawBalance, decimals } = balances[t.symbol];\n return (\n <button\n key={t.symbol}\n onClick={() => onNavigate({ name: \"token\", token: t })}\n className=\"flex items-center gap-3 rounded-2xl bg-card/40 px-4 py-3 text-left backdrop-blur-sm transition-colors hover:bg-card/60\"\n >\n <div className=\"grid h-11 w-11 shrink-0 place-items-center rounded-full bg-foreground/[0.06]\">\n <CurrencyIcon symbol={t.symbol} size={24} />\n </div>\n <div className=\"min-w-0 flex-1\">\n <div className=\"text-sm font-semibold\">{t.symbol}</div>\n <div className=\"text-xs text-muted-foreground\">{t.name}</div>\n </div>\n <div className=\"text-right\">\n <div className=\"text-sm font-semibold tabular-nums\">{hideBalances ? \"••••\" : fmt(rawBalance, decimals)}</div>\n {!hideBalances && usdPrices !== null && (\n <div className=\"text-xs text-muted-foreground tabular-nums\">{fmtUsd(usd(t.symbol))}</div>\n )}\n </div>\n </button>\n );\n })}\n </div>\n </section>\n )}\n\n {(nftItems.length > 0 || loadingNfts) && (\n <section>\n <SectionHeader title=\"NFTs\" />\n <div className=\"mt-2\">\n <NftStrip items={nftItems} isLoading={loadingNfts} onNavigate={onClose} resolveImage={resolveImage} />\n </div>\n </section>\n )}\n\n {activated && (\n <SuccessDialog\n title=\"Account activated\"\n message=\"Your account is live and ready to use\"\n onClose={() => setActivated(false)}\n />\n )}\n\n <a\n href={externalWallet.href}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"mt-auto text-center text-xs text-muted-foreground/60 transition-colors hover:text-muted-foreground\"\n >\n {externalWallet.label}\n </a>\n </main>\n );\n}\n\nfunction ArrowUp() {\n return (\n <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 19V5M5 12l7-7 7 7\" />\n </svg>\n );\n}\nfunction ArrowDown() {\n return (\n <svg width=\"19\" height=\"19\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.2\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M12 5v14M19 12l-7 7-7-7\" />\n </svg>\n );\n}\nfunction ActivityIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M22 12h-4l-3 9L9 3l-3 9H2\" />\n </svg>\n );\n}\nfunction MailIcon() {\n return (\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" className=\"text-brand-orange\">\n <rect x=\"2\" y=\"4\" width=\"20\" height=\"16\" rx=\"2\" />\n <path d=\"m22 7-8.97 5.7a1.94 1.94 0 0 1-2.06 0L2 7\" />\n </svg>\n );\n}\nfunction RocketIcon() {\n return (\n <svg width=\"18\" height=\"18\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2.1\" strokeLinecap=\"round\" strokeLinejoin=\"round\">\n <path d=\"M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 00-2.91-.09z\" />\n <path d=\"M12 15l-3-3a22 22 0 012-3.95A12.88 12.88 0 0122 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 01-4 2z\" />\n <path d=\"M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5\" />\n </svg>\n );\n}\n"],"mappings":"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","names":[]}