@nexus-cross/dapp-ui 1.0.1-beta.1 → 1.0.1-beta.2

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.
package/dist/index.d.cts CHANGED
@@ -124,6 +124,173 @@ interface SendTransactionArgs {
124
124
  gas?: bigint;
125
125
  }
126
126
  type SendTransactionFn = (args: SendTransactionArgs) => Promise<`0x${string}`>;
127
+ interface PoolToken {
128
+ address: string;
129
+ symbol: string;
130
+ name: string;
131
+ decimals: number;
132
+ price: string;
133
+ }
134
+ interface RewardPool {
135
+ pool_id: number;
136
+ pool_address: string;
137
+ pool_name: string;
138
+ pool_type: "CrossPool" | "GamePool";
139
+ pool_status: string;
140
+ deposit_token: PoolToken;
141
+ reward_tokens: PoolToken[];
142
+ total_deposited: string;
143
+ total_users: number;
144
+ created_block: number;
145
+ created_time: number;
146
+ last_updated_block: number;
147
+ last_updated_time: number;
148
+ }
149
+ interface UserDepositInfo {
150
+ account: string;
151
+ pool_address: string;
152
+ pool_id: number;
153
+ pool_name: string;
154
+ deposited_amount: string;
155
+ claimable_reward: string;
156
+ total_rewards_claimed: string;
157
+ last_deposited_block: number;
158
+ last_updated_block: number;
159
+ last_updated_time: number;
160
+ last_withdrawn_block: number;
161
+ }
162
+ interface Billboard {
163
+ price: string;
164
+ change: string;
165
+ rate: number;
166
+ high24: string;
167
+ low24: string;
168
+ baseVolume: string;
169
+ quoteVolume: string;
170
+ }
171
+ interface DexPairInfo {
172
+ pair_name: string;
173
+ pair_address: string;
174
+ quote_address: string;
175
+ base_address: string;
176
+ quote_symbol: string;
177
+ base_symbol: string;
178
+ quote_name: string;
179
+ base_name: string;
180
+ quote_decimals: number;
181
+ base_decimals: number;
182
+ icon_image: string;
183
+ enabled: boolean;
184
+ active: boolean;
185
+ status: string;
186
+ billboard: Billboard;
187
+ tick_size: string;
188
+ lot_size: string;
189
+ }
190
+ interface DexOpenOrder {
191
+ order_id: number;
192
+ /** 0 = sell (ask), 1 = buy (bid) */
193
+ order_side: number;
194
+ owner: string;
195
+ pair: string;
196
+ price: string;
197
+ amount: string;
198
+ filled: string;
199
+ volume: string;
200
+ created_at: number;
201
+ created_block: number;
202
+ created_hash: string;
203
+ }
204
+ interface ForgePoolToken {
205
+ address: string;
206
+ name: string;
207
+ symbol: string;
208
+ image: string;
209
+ }
210
+ interface ForgePool {
211
+ lp_balance: string;
212
+ pair_address: string;
213
+ pool_ownership: string;
214
+ total_supply: string;
215
+ token: ForgePoolToken;
216
+ }
217
+ interface ForgeTokenDetail {
218
+ address: string;
219
+ name: string;
220
+ symbol: string;
221
+ image: string;
222
+ image_url: string;
223
+ pair_address: string;
224
+ wrapped_native: string;
225
+ virtual_reserve_b: string;
226
+ reserve_a: string;
227
+ reserve_b: string;
228
+ graduated: boolean;
229
+ current_price: string;
230
+ market_cap: string;
231
+ total_supply: string;
232
+ available_supply: string;
233
+ }
234
+
235
+ type DexMarket = "cross" | "crossd" | "forge";
236
+
237
+ /**
238
+ * dapp-ui가 렌더하는 outlink의 대분류.
239
+ * `portfolio`는 세부적으로 `origin`으로 더 나뉜다.
240
+ */
241
+ type OutlinkCategory = "terms" | "privacy" | "portfolio";
242
+ /**
243
+ * `onOutlink` 콜백에 전달되는 호출 컨텍스트. `category` + `origin`으로
244
+ * 호출측이 목적지별 분기를 할 수 있고, `portfolio-*`의 경우 해당 섹션의
245
+ * 원시 데이터를 `payload`로 내려보낸다.
246
+ *
247
+ * 새로운 포트폴리오 섹션이 추가될 때는 이 union에 variant 하나만 더하면
248
+ * 자동으로 호출측에도 타입이 좁혀져서 전달된다.
249
+ */
250
+ type OutlinkContext = {
251
+ category: "terms";
252
+ origin: "terms";
253
+ } | {
254
+ category: "privacy";
255
+ origin: "privacy";
256
+ } | {
257
+ category: "portfolio";
258
+ origin: "portfolio-rewards";
259
+ payload: {
260
+ pool: RewardPool;
261
+ userDeposit?: UserDepositInfo;
262
+ };
263
+ } | {
264
+ category: "portfolio";
265
+ origin: "portfolio-forge";
266
+ payload: {
267
+ pool: ForgePool;
268
+ tokenDetail?: ForgeTokenDetail;
269
+ };
270
+ } | {
271
+ category: "portfolio";
272
+ origin: "portfolio-dex-order";
273
+ payload: {
274
+ market: DexMarket;
275
+ side: "buy" | "sell";
276
+ order: DexOpenOrder;
277
+ pair?: DexPairInfo;
278
+ };
279
+ };
280
+ type OutlinkOrigin = OutlinkContext["origin"];
281
+ /**
282
+ * outlink 가로채기 콜백. 반환값 규칙:
283
+ *
284
+ * - `string` → 해당 URL로 이동(원본을 변형 가능).
285
+ * - `null` → 이동 취소(창도 열리지 않음).
286
+ * - `undefined` → 원본 URL로 그대로 이동 (no-op).
287
+ * - `Promise<...>`→ 위 값 중 하나를 resolve. 비동기 동안 사용자 제스처를
288
+ * 유지하기 위해 빈 창이 먼저 열린 뒤 URL이 채워진다.
289
+ *
290
+ * middle-click · cmd-click · ctrl-click 등 브라우저 새 탭 단축 동작은
291
+ * 가로채지 않고 원본 `href`로 그대로 열린다.
292
+ */
293
+ type OnOutlink = (link: string, ctx: OutlinkContext) => string | null | undefined | Promise<string | null | undefined>;
127
294
 
128
295
  interface WalletInfoTriggerProps {
129
296
  asChild?: boolean;
@@ -173,15 +340,27 @@ interface WalletInfoProps {
173
340
  preferredTokens?: PreferredToken[];
174
341
  onSelectWallet?: () => void;
175
342
  onCopyAddress?: (address: string, success: boolean) => void;
176
- /** 지정 시 기본 Disconnect 버튼이 Footer에 노출됨. WalletInfo.Footer 슬롯이 우선. */
343
+ /**
344
+ * 지정 시 기본 Disconnect 버튼이 Footer에 노출됨. `WalletInfo.Footer` 슬롯이
345
+ * 있으면 해당 슬롯이 메인 영역을 대체한다. Terms/Privacy 링크는 둘 중 무엇을
346
+ * 쓰든 항상 하단에 함께 렌더된다.
347
+ */
177
348
  onDisconnect?: () => void;
178
349
  /** 기본 Disconnect 버튼 라벨 (기본 "Disconnect"). */
179
350
  disconnectLabel?: string;
180
- /** Footer 하단 Terms 링크 URL. 지정 시에만 노출. */
351
+ /**
352
+ * Footer 하단 Terms 링크 URL.
353
+ * 미지정 시 CROSS 에코시스템 기본 URL로 폴백되어 자동 노출된다.
354
+ * 숨기려면 빈 문자열(`""`)을 전달.
355
+ */
181
356
  termsUrl?: string;
182
357
  /** Terms 링크 라벨 (기본 "Terms of Service"). */
183
358
  termsLabel?: string;
184
- /** Footer 하단 Privacy 링크 URL. 지정 시에만 노출. */
359
+ /**
360
+ * Footer 하단 Privacy 링크 URL.
361
+ * 미지정 시 CROSS 에코시스템 기본 URL로 폴백되어 자동 노출된다.
362
+ * 숨기려면 빈 문자열(`""`)을 전달.
363
+ */
185
364
  privacyUrl?: string;
186
365
  /** Privacy 링크 라벨 (기본 "Privacy Policy"). */
187
366
  privacyLabel?: string;
@@ -206,10 +385,20 @@ interface WalletInfoProps {
206
385
  * wagmi의 `sendTransactionAsync`를 그대로 전달해도 호환된다.
207
386
  */
208
387
  sendTransaction?: SendTransactionFn;
388
+ /**
389
+ * Terms/Privacy · 포트폴리오 섹션 등 외부 링크 이동을 가로채는 콜백.
390
+ * `(url, ctx) => newUrl | null | undefined | Promise<...>` 형태이며
391
+ * - `string` → 해당 URL로 이동(변형 가능)
392
+ * - `null` → 이동 취소
393
+ * - `undefined` → 원본 URL 유지
394
+ * middle-click · cmd-click은 가로채지 않고 원본 `href`로 열린다.
395
+ * `showPortfolio=true`일 때 내부 `WalletPortfolioBody`로도 릴레이된다.
396
+ */
397
+ onOutlink?: OnOutlink;
209
398
  style?: WalletInfoStyle;
210
399
  children: React.ReactNode;
211
400
  }
212
- declare function WalletInfoRoot({ env, theme, mobileBreakpoint, drawerDirection, modal, showBalance, showForgeToken, showGameToken, showQR, qrLogoSrc, walletAddress, accountName, profileImageUrl, connectorId, connectorName: connectorNameProp, connectorIconUrl: connectorIconUrlProp, preferredTokens, onSelectWallet, onCopyAddress, onDisconnect, disconnectLabel, termsUrl, termsLabel, privacyUrl, privacyLabel, open: propOpen, onOpenChange, showPortfolio, portfolioTitle, showTotalAssets, totalAssetsLabel, sendTransaction, style, children, }: WalletInfoProps): react_jsx_runtime.JSX.Element;
401
+ declare function WalletInfoRoot({ env, theme, mobileBreakpoint, drawerDirection, modal, showBalance, showForgeToken, showGameToken, showQR, qrLogoSrc, walletAddress, accountName, profileImageUrl, connectorId, connectorName: connectorNameProp, connectorIconUrl: connectorIconUrlProp, preferredTokens, onSelectWallet, onCopyAddress, onDisconnect, disconnectLabel, termsUrl, termsLabel, privacyUrl, privacyLabel, open: propOpen, onOpenChange, showPortfolio, portfolioTitle, showTotalAssets, totalAssetsLabel, sendTransaction, onOutlink, style, children, }: WalletInfoProps): react_jsx_runtime.JSX.Element;
213
402
  declare const WalletInfo: typeof WalletInfoRoot & {
214
403
  Trigger: typeof WalletInfoTrigger;
215
404
  Content: typeof WalletInfoContent;
@@ -413,9 +602,14 @@ interface WalletPortfolioProps {
413
602
  * 종속되지 않도록 외부에서 주입한다.
414
603
  */
415
604
  sendTransaction?: SendTransactionFn;
605
+ /**
606
+ * 포트폴리오 섹션 내부 외부 링크 이동을 가로채는 콜백.
607
+ * 반환값으로 URL 변형 / 취소가 가능하며 async도 지원한다.
608
+ */
609
+ onOutlink?: OnOutlink;
416
610
  children: React.ReactNode;
417
611
  }
418
- declare function WalletPortfolioRoot({ env, theme, walletAddress, open: propOpen, onOpenChange, sendTransaction, children, }: WalletPortfolioProps): react_jsx_runtime.JSX.Element;
612
+ declare function WalletPortfolioRoot({ env, theme, walletAddress, open: propOpen, onOpenChange, sendTransaction, onOutlink, children, }: WalletPortfolioProps): react_jsx_runtime.JSX.Element;
419
613
  declare const WalletPortfolio: typeof WalletPortfolioRoot & {
420
614
  Trigger: typeof WalletPortfolioTrigger;
421
615
  Content: typeof WalletPortfolioContent;
@@ -443,8 +637,13 @@ interface WalletPortfolioBodyProps {
443
637
  * `WalletPortfolioBody`를 단독 embed로 사용하는 경우 직접 전달해야 한다.
444
638
  */
445
639
  sendTransaction?: SendTransactionFn;
640
+ /**
641
+ * 포트폴리오 섹션 내부 외부 링크 이동을 가로채는 콜백.
642
+ * 반환값으로 URL 변형 / 취소가 가능하며 async도 지원한다.
643
+ */
644
+ onOutlink?: OnOutlink;
446
645
  }
447
- declare function WalletPortfolioBody({ env, theme, walletAddress, onBack, showHeader, variant, className, sendTransaction, }: WalletPortfolioBodyProps): react_jsx_runtime.JSX.Element;
646
+ declare function WalletPortfolioBody({ env, theme, walletAddress, onBack, showHeader, variant, className, sendTransaction, onOutlink, }: WalletPortfolioBodyProps): react_jsx_runtime.JSX.Element;
448
647
 
449
648
  declare function CROSSxIcon(): react_jsx_runtime.JSX.Element;
450
649
  declare function MetaMaskIcon(): react_jsx_runtime.JSX.Element;
@@ -671,4 +870,4 @@ declare const BINANCE_ICON: string;
671
870
  declare const GOOGLE_ICON: string;
672
871
  declare const APPLE_ICON: string;
673
872
 
674
- export { APPLE_ICON, AppLauncher, AppLauncherContent, type AppLauncherContentProps, type AppLauncherProps, AppLauncherTrigger, type AppLauncherTriggerProps, BINANCE_ICON, CONNECTOR_REGISTRY, CROSSX_ICON, type ChainId, ConnectButton, type ConnectButtonProps, ConnectorId, type ConnectorMeta, type DrawerDirection$1 as DrawerDirection, type Environment, GOOGLE_ICON, type GlobalMenu, type GlobalMenuItem, type GlobalMenuItemUrl, METAMASK_ICON, type PreferredToken, type SendTransactionArgs, type SendTransactionFn, TOKEN_STATS_QUERY_KEY, type Theme, type TokenBalance, type TokenBalanceResponse, type TokenStats, type TokenStatsResponse, USER_BALANCE_QUERY_KEY, WALLET_REGISTRY, type WalletConfig, WalletConnectModal, type WalletConnectModalContentProps, type WalletConnectModalProps, type WalletConnectModalStyle, type WalletConnectModalTriggerProps, type WalletHandlers, type WalletId, WalletInfo, type WalletInfoContentProps, type WalletInfoFooterProps, type WalletInfoNavProps, type WalletInfoProps, type WalletInfoStyle, type WalletInfoTriggerProps, WalletPortfolio, WalletPortfolioBody, type WalletPortfolioBodyProps, type WalletPortfolioContentProps, type WalletPortfolioProps, type WalletPortfolioTriggerProps, type WalletProvider, useGlobalMenu, useTokenBalance, useTokenStats, useWalletDetect };
873
+ export { APPLE_ICON, AppLauncher, AppLauncherContent, type AppLauncherContentProps, type AppLauncherProps, AppLauncherTrigger, type AppLauncherTriggerProps, BINANCE_ICON, CONNECTOR_REGISTRY, CROSSX_ICON, type ChainId, ConnectButton, type ConnectButtonProps, ConnectorId, type ConnectorMeta, type DrawerDirection$1 as DrawerDirection, type Environment, GOOGLE_ICON, type GlobalMenu, type GlobalMenuItem, type GlobalMenuItemUrl, METAMASK_ICON, type OnOutlink, type OutlinkCategory, type OutlinkContext, type OutlinkOrigin, type PreferredToken, type SendTransactionArgs, type SendTransactionFn, TOKEN_STATS_QUERY_KEY, type Theme, type TokenBalance, type TokenBalanceResponse, type TokenStats, type TokenStatsResponse, USER_BALANCE_QUERY_KEY, WALLET_REGISTRY, type WalletConfig, WalletConnectModal, type WalletConnectModalContentProps, type WalletConnectModalProps, type WalletConnectModalStyle, type WalletConnectModalTriggerProps, type WalletHandlers, type WalletId, WalletInfo, type WalletInfoContentProps, type WalletInfoFooterProps, type WalletInfoNavProps, type WalletInfoProps, type WalletInfoStyle, type WalletInfoTriggerProps, WalletPortfolio, WalletPortfolioBody, type WalletPortfolioBodyProps, type WalletPortfolioContentProps, type WalletPortfolioProps, type WalletPortfolioTriggerProps, type WalletProvider, useGlobalMenu, useTokenBalance, useTokenStats, useWalletDetect };
package/dist/index.d.ts CHANGED
@@ -124,6 +124,173 @@ interface SendTransactionArgs {
124
124
  gas?: bigint;
125
125
  }
126
126
  type SendTransactionFn = (args: SendTransactionArgs) => Promise<`0x${string}`>;
127
+ interface PoolToken {
128
+ address: string;
129
+ symbol: string;
130
+ name: string;
131
+ decimals: number;
132
+ price: string;
133
+ }
134
+ interface RewardPool {
135
+ pool_id: number;
136
+ pool_address: string;
137
+ pool_name: string;
138
+ pool_type: "CrossPool" | "GamePool";
139
+ pool_status: string;
140
+ deposit_token: PoolToken;
141
+ reward_tokens: PoolToken[];
142
+ total_deposited: string;
143
+ total_users: number;
144
+ created_block: number;
145
+ created_time: number;
146
+ last_updated_block: number;
147
+ last_updated_time: number;
148
+ }
149
+ interface UserDepositInfo {
150
+ account: string;
151
+ pool_address: string;
152
+ pool_id: number;
153
+ pool_name: string;
154
+ deposited_amount: string;
155
+ claimable_reward: string;
156
+ total_rewards_claimed: string;
157
+ last_deposited_block: number;
158
+ last_updated_block: number;
159
+ last_updated_time: number;
160
+ last_withdrawn_block: number;
161
+ }
162
+ interface Billboard {
163
+ price: string;
164
+ change: string;
165
+ rate: number;
166
+ high24: string;
167
+ low24: string;
168
+ baseVolume: string;
169
+ quoteVolume: string;
170
+ }
171
+ interface DexPairInfo {
172
+ pair_name: string;
173
+ pair_address: string;
174
+ quote_address: string;
175
+ base_address: string;
176
+ quote_symbol: string;
177
+ base_symbol: string;
178
+ quote_name: string;
179
+ base_name: string;
180
+ quote_decimals: number;
181
+ base_decimals: number;
182
+ icon_image: string;
183
+ enabled: boolean;
184
+ active: boolean;
185
+ status: string;
186
+ billboard: Billboard;
187
+ tick_size: string;
188
+ lot_size: string;
189
+ }
190
+ interface DexOpenOrder {
191
+ order_id: number;
192
+ /** 0 = sell (ask), 1 = buy (bid) */
193
+ order_side: number;
194
+ owner: string;
195
+ pair: string;
196
+ price: string;
197
+ amount: string;
198
+ filled: string;
199
+ volume: string;
200
+ created_at: number;
201
+ created_block: number;
202
+ created_hash: string;
203
+ }
204
+ interface ForgePoolToken {
205
+ address: string;
206
+ name: string;
207
+ symbol: string;
208
+ image: string;
209
+ }
210
+ interface ForgePool {
211
+ lp_balance: string;
212
+ pair_address: string;
213
+ pool_ownership: string;
214
+ total_supply: string;
215
+ token: ForgePoolToken;
216
+ }
217
+ interface ForgeTokenDetail {
218
+ address: string;
219
+ name: string;
220
+ symbol: string;
221
+ image: string;
222
+ image_url: string;
223
+ pair_address: string;
224
+ wrapped_native: string;
225
+ virtual_reserve_b: string;
226
+ reserve_a: string;
227
+ reserve_b: string;
228
+ graduated: boolean;
229
+ current_price: string;
230
+ market_cap: string;
231
+ total_supply: string;
232
+ available_supply: string;
233
+ }
234
+
235
+ type DexMarket = "cross" | "crossd" | "forge";
236
+
237
+ /**
238
+ * dapp-ui가 렌더하는 outlink의 대분류.
239
+ * `portfolio`는 세부적으로 `origin`으로 더 나뉜다.
240
+ */
241
+ type OutlinkCategory = "terms" | "privacy" | "portfolio";
242
+ /**
243
+ * `onOutlink` 콜백에 전달되는 호출 컨텍스트. `category` + `origin`으로
244
+ * 호출측이 목적지별 분기를 할 수 있고, `portfolio-*`의 경우 해당 섹션의
245
+ * 원시 데이터를 `payload`로 내려보낸다.
246
+ *
247
+ * 새로운 포트폴리오 섹션이 추가될 때는 이 union에 variant 하나만 더하면
248
+ * 자동으로 호출측에도 타입이 좁혀져서 전달된다.
249
+ */
250
+ type OutlinkContext = {
251
+ category: "terms";
252
+ origin: "terms";
253
+ } | {
254
+ category: "privacy";
255
+ origin: "privacy";
256
+ } | {
257
+ category: "portfolio";
258
+ origin: "portfolio-rewards";
259
+ payload: {
260
+ pool: RewardPool;
261
+ userDeposit?: UserDepositInfo;
262
+ };
263
+ } | {
264
+ category: "portfolio";
265
+ origin: "portfolio-forge";
266
+ payload: {
267
+ pool: ForgePool;
268
+ tokenDetail?: ForgeTokenDetail;
269
+ };
270
+ } | {
271
+ category: "portfolio";
272
+ origin: "portfolio-dex-order";
273
+ payload: {
274
+ market: DexMarket;
275
+ side: "buy" | "sell";
276
+ order: DexOpenOrder;
277
+ pair?: DexPairInfo;
278
+ };
279
+ };
280
+ type OutlinkOrigin = OutlinkContext["origin"];
281
+ /**
282
+ * outlink 가로채기 콜백. 반환값 규칙:
283
+ *
284
+ * - `string` → 해당 URL로 이동(원본을 변형 가능).
285
+ * - `null` → 이동 취소(창도 열리지 않음).
286
+ * - `undefined` → 원본 URL로 그대로 이동 (no-op).
287
+ * - `Promise<...>`→ 위 값 중 하나를 resolve. 비동기 동안 사용자 제스처를
288
+ * 유지하기 위해 빈 창이 먼저 열린 뒤 URL이 채워진다.
289
+ *
290
+ * middle-click · cmd-click · ctrl-click 등 브라우저 새 탭 단축 동작은
291
+ * 가로채지 않고 원본 `href`로 그대로 열린다.
292
+ */
293
+ type OnOutlink = (link: string, ctx: OutlinkContext) => string | null | undefined | Promise<string | null | undefined>;
127
294
 
128
295
  interface WalletInfoTriggerProps {
129
296
  asChild?: boolean;
@@ -173,15 +340,27 @@ interface WalletInfoProps {
173
340
  preferredTokens?: PreferredToken[];
174
341
  onSelectWallet?: () => void;
175
342
  onCopyAddress?: (address: string, success: boolean) => void;
176
- /** 지정 시 기본 Disconnect 버튼이 Footer에 노출됨. WalletInfo.Footer 슬롯이 우선. */
343
+ /**
344
+ * 지정 시 기본 Disconnect 버튼이 Footer에 노출됨. `WalletInfo.Footer` 슬롯이
345
+ * 있으면 해당 슬롯이 메인 영역을 대체한다. Terms/Privacy 링크는 둘 중 무엇을
346
+ * 쓰든 항상 하단에 함께 렌더된다.
347
+ */
177
348
  onDisconnect?: () => void;
178
349
  /** 기본 Disconnect 버튼 라벨 (기본 "Disconnect"). */
179
350
  disconnectLabel?: string;
180
- /** Footer 하단 Terms 링크 URL. 지정 시에만 노출. */
351
+ /**
352
+ * Footer 하단 Terms 링크 URL.
353
+ * 미지정 시 CROSS 에코시스템 기본 URL로 폴백되어 자동 노출된다.
354
+ * 숨기려면 빈 문자열(`""`)을 전달.
355
+ */
181
356
  termsUrl?: string;
182
357
  /** Terms 링크 라벨 (기본 "Terms of Service"). */
183
358
  termsLabel?: string;
184
- /** Footer 하단 Privacy 링크 URL. 지정 시에만 노출. */
359
+ /**
360
+ * Footer 하단 Privacy 링크 URL.
361
+ * 미지정 시 CROSS 에코시스템 기본 URL로 폴백되어 자동 노출된다.
362
+ * 숨기려면 빈 문자열(`""`)을 전달.
363
+ */
185
364
  privacyUrl?: string;
186
365
  /** Privacy 링크 라벨 (기본 "Privacy Policy"). */
187
366
  privacyLabel?: string;
@@ -206,10 +385,20 @@ interface WalletInfoProps {
206
385
  * wagmi의 `sendTransactionAsync`를 그대로 전달해도 호환된다.
207
386
  */
208
387
  sendTransaction?: SendTransactionFn;
388
+ /**
389
+ * Terms/Privacy · 포트폴리오 섹션 등 외부 링크 이동을 가로채는 콜백.
390
+ * `(url, ctx) => newUrl | null | undefined | Promise<...>` 형태이며
391
+ * - `string` → 해당 URL로 이동(변형 가능)
392
+ * - `null` → 이동 취소
393
+ * - `undefined` → 원본 URL 유지
394
+ * middle-click · cmd-click은 가로채지 않고 원본 `href`로 열린다.
395
+ * `showPortfolio=true`일 때 내부 `WalletPortfolioBody`로도 릴레이된다.
396
+ */
397
+ onOutlink?: OnOutlink;
209
398
  style?: WalletInfoStyle;
210
399
  children: React.ReactNode;
211
400
  }
212
- declare function WalletInfoRoot({ env, theme, mobileBreakpoint, drawerDirection, modal, showBalance, showForgeToken, showGameToken, showQR, qrLogoSrc, walletAddress, accountName, profileImageUrl, connectorId, connectorName: connectorNameProp, connectorIconUrl: connectorIconUrlProp, preferredTokens, onSelectWallet, onCopyAddress, onDisconnect, disconnectLabel, termsUrl, termsLabel, privacyUrl, privacyLabel, open: propOpen, onOpenChange, showPortfolio, portfolioTitle, showTotalAssets, totalAssetsLabel, sendTransaction, style, children, }: WalletInfoProps): react_jsx_runtime.JSX.Element;
401
+ declare function WalletInfoRoot({ env, theme, mobileBreakpoint, drawerDirection, modal, showBalance, showForgeToken, showGameToken, showQR, qrLogoSrc, walletAddress, accountName, profileImageUrl, connectorId, connectorName: connectorNameProp, connectorIconUrl: connectorIconUrlProp, preferredTokens, onSelectWallet, onCopyAddress, onDisconnect, disconnectLabel, termsUrl, termsLabel, privacyUrl, privacyLabel, open: propOpen, onOpenChange, showPortfolio, portfolioTitle, showTotalAssets, totalAssetsLabel, sendTransaction, onOutlink, style, children, }: WalletInfoProps): react_jsx_runtime.JSX.Element;
213
402
  declare const WalletInfo: typeof WalletInfoRoot & {
214
403
  Trigger: typeof WalletInfoTrigger;
215
404
  Content: typeof WalletInfoContent;
@@ -413,9 +602,14 @@ interface WalletPortfolioProps {
413
602
  * 종속되지 않도록 외부에서 주입한다.
414
603
  */
415
604
  sendTransaction?: SendTransactionFn;
605
+ /**
606
+ * 포트폴리오 섹션 내부 외부 링크 이동을 가로채는 콜백.
607
+ * 반환값으로 URL 변형 / 취소가 가능하며 async도 지원한다.
608
+ */
609
+ onOutlink?: OnOutlink;
416
610
  children: React.ReactNode;
417
611
  }
418
- declare function WalletPortfolioRoot({ env, theme, walletAddress, open: propOpen, onOpenChange, sendTransaction, children, }: WalletPortfolioProps): react_jsx_runtime.JSX.Element;
612
+ declare function WalletPortfolioRoot({ env, theme, walletAddress, open: propOpen, onOpenChange, sendTransaction, onOutlink, children, }: WalletPortfolioProps): react_jsx_runtime.JSX.Element;
419
613
  declare const WalletPortfolio: typeof WalletPortfolioRoot & {
420
614
  Trigger: typeof WalletPortfolioTrigger;
421
615
  Content: typeof WalletPortfolioContent;
@@ -443,8 +637,13 @@ interface WalletPortfolioBodyProps {
443
637
  * `WalletPortfolioBody`를 단독 embed로 사용하는 경우 직접 전달해야 한다.
444
638
  */
445
639
  sendTransaction?: SendTransactionFn;
640
+ /**
641
+ * 포트폴리오 섹션 내부 외부 링크 이동을 가로채는 콜백.
642
+ * 반환값으로 URL 변형 / 취소가 가능하며 async도 지원한다.
643
+ */
644
+ onOutlink?: OnOutlink;
446
645
  }
447
- declare function WalletPortfolioBody({ env, theme, walletAddress, onBack, showHeader, variant, className, sendTransaction, }: WalletPortfolioBodyProps): react_jsx_runtime.JSX.Element;
646
+ declare function WalletPortfolioBody({ env, theme, walletAddress, onBack, showHeader, variant, className, sendTransaction, onOutlink, }: WalletPortfolioBodyProps): react_jsx_runtime.JSX.Element;
448
647
 
449
648
  declare function CROSSxIcon(): react_jsx_runtime.JSX.Element;
450
649
  declare function MetaMaskIcon(): react_jsx_runtime.JSX.Element;
@@ -671,4 +870,4 @@ declare const BINANCE_ICON: string;
671
870
  declare const GOOGLE_ICON: string;
672
871
  declare const APPLE_ICON: string;
673
872
 
674
- export { APPLE_ICON, AppLauncher, AppLauncherContent, type AppLauncherContentProps, type AppLauncherProps, AppLauncherTrigger, type AppLauncherTriggerProps, BINANCE_ICON, CONNECTOR_REGISTRY, CROSSX_ICON, type ChainId, ConnectButton, type ConnectButtonProps, ConnectorId, type ConnectorMeta, type DrawerDirection$1 as DrawerDirection, type Environment, GOOGLE_ICON, type GlobalMenu, type GlobalMenuItem, type GlobalMenuItemUrl, METAMASK_ICON, type PreferredToken, type SendTransactionArgs, type SendTransactionFn, TOKEN_STATS_QUERY_KEY, type Theme, type TokenBalance, type TokenBalanceResponse, type TokenStats, type TokenStatsResponse, USER_BALANCE_QUERY_KEY, WALLET_REGISTRY, type WalletConfig, WalletConnectModal, type WalletConnectModalContentProps, type WalletConnectModalProps, type WalletConnectModalStyle, type WalletConnectModalTriggerProps, type WalletHandlers, type WalletId, WalletInfo, type WalletInfoContentProps, type WalletInfoFooterProps, type WalletInfoNavProps, type WalletInfoProps, type WalletInfoStyle, type WalletInfoTriggerProps, WalletPortfolio, WalletPortfolioBody, type WalletPortfolioBodyProps, type WalletPortfolioContentProps, type WalletPortfolioProps, type WalletPortfolioTriggerProps, type WalletProvider, useGlobalMenu, useTokenBalance, useTokenStats, useWalletDetect };
873
+ export { APPLE_ICON, AppLauncher, AppLauncherContent, type AppLauncherContentProps, type AppLauncherProps, AppLauncherTrigger, type AppLauncherTriggerProps, BINANCE_ICON, CONNECTOR_REGISTRY, CROSSX_ICON, type ChainId, ConnectButton, type ConnectButtonProps, ConnectorId, type ConnectorMeta, type DrawerDirection$1 as DrawerDirection, type Environment, GOOGLE_ICON, type GlobalMenu, type GlobalMenuItem, type GlobalMenuItemUrl, METAMASK_ICON, type OnOutlink, type OutlinkCategory, type OutlinkContext, type OutlinkOrigin, type PreferredToken, type SendTransactionArgs, type SendTransactionFn, TOKEN_STATS_QUERY_KEY, type Theme, type TokenBalance, type TokenBalanceResponse, type TokenStats, type TokenStatsResponse, USER_BALANCE_QUERY_KEY, WALLET_REGISTRY, type WalletConfig, WalletConnectModal, type WalletConnectModalContentProps, type WalletConnectModalProps, type WalletConnectModalStyle, type WalletConnectModalTriggerProps, type WalletHandlers, type WalletId, WalletInfo, type WalletInfoContentProps, type WalletInfoFooterProps, type WalletInfoNavProps, type WalletInfoProps, type WalletInfoStyle, type WalletInfoTriggerProps, WalletPortfolio, WalletPortfolioBody, type WalletPortfolioBodyProps, type WalletPortfolioContentProps, type WalletPortfolioProps, type WalletPortfolioTriggerProps, type WalletProvider, useGlobalMenu, useTokenBalance, useTokenStats, useWalletDetect };